一尘不染

x86 ASM Linux-使用.bss部分

linux

我希望这些问题很简单:(NASM编译器,Linux,x86 Intel语法)

第1部分:

我试图弄清楚如何使用Assembly程序的.bss部分来找到一种将值(例如,从操作(+-* /)的值)存储到声明的变量的方法。例如:

section .bss

variable:  resb 50                                       ;Imaginary buffer

section .text

add 10,1                                                 ;Operation
;move the result into variable

因此,我知道有可能使用内核intterupt来读取用户输入(但这涉及字符串),但是有没有办法将此值复制到 变量
变量中,以便以后使用?这会容易得多而不是必须要在堆栈中上下推和弹出两件事。

第2部分:

有没有办法删除.bss部分中变量的值?换句话说,如果我想在.bss变量中存储一个新值,如何在变量中已有的字符/值不与新值混合的情况下进行操作?

谢谢


阅读 225

收藏
2020-06-07

共1个答案

一尘不染

section .bss

variable: resb 4

…该符号variable现在指向该.bss部分中4个字节的存储地址(即足以存储32位值)。

section .text
...
mov eax, 123
mov [variable], eax

…将eax寄存器设置为123,然后将的值存储eax在符号所指向的位置variable

mov eax, [variable]

…将当前存储在由寻址的位置中的值读variableeax寄存器。

mov eax, 456
mov [variable], eax

…存储一个新值,覆盖前一个值。

2020-06-07