2011-11-16 26 views
10

我希望這些問題很簡單:(NASM編譯器,Linux和英特爾的x86語法)86 ASM的Linux - 使用.bss段

第1部分:

我試圖找出如何使用匯編程序的.bss部分找到一種方法來存儲值,如從操作(+ - * /)中的值到聲明的變量。例如:

section .bss 

variable: resb 50          ;Imaginary buffer 

section .text 

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

所以,我知道這是可能與內核intterupt要做到這一點,用於讀取用戶輸入(但涉及字符串,但有沒有辦法爲這個值複製到變量變量,因此?它可用於以後這將是不必打開和關閉壓棧和彈出兩件事情要容易得多

第2部分:

有沒有一種方法,以消除在變量的值.bss section?換句話說,如果我想在.bss變量中存儲一個新的值,我怎麼能這樣做?那麼變量中的字符/值是否與新值沒有複合呢?

由於

回答

25
section .bss 

variable: resb 4 

...符號variable現指的4個字節存儲在.bss部分中的地址(即足以存儲在一個32位的值)。

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

...設置eax寄存器123,然後存儲的eax由符號variable尋址地址的值。

mov eax, [variable] 

...讀取當前存儲在由variable涉及到eax寄存器中的位置的值。

mov eax, 456 
mov [variable], eax 

...存儲新值,覆蓋前一個值。

+0

很好的解釋,一如既往! – nmagerko