x86 ASM Linux - 使用.bss部分

时间:2011-11-16 00:46:47

标签: linux assembly x86 nasm

我希望这些问题相当简单:( NASM编译器,Linux,x86英特尔语法)

第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变量中存储一个新值,如果没有变量中的字符/值没有与新值复合,我怎么能这样做呢?

由于

1 个答案:

答案 0 :(得分:27)

section .bss

variable: resb 4

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

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

...将eax注册设置为123,然后将eax的值存储在符号variable所代表的位置。

mov eax, [variable]

...将当前存储在variable寻址位置的值读入eax寄存器。

mov eax, 456
mov [variable], eax

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