2014-10-05 55 views
0

我想在程序集中編寫一個簡單的程序來添加和減去數字。我正在使用NASM來組裝程序。當我使用gdb評估程序時,寄存器沒有我期望的值,我無法弄清楚原因。這是我的代碼。現在,我只是想弄清楚如何將一個數字存儲到一個變量中,然後將該變量移動到一個寄存器中,因爲我的代碼甚至沒有這樣做。用匯編語言將一個數字存儲到一個變量中

SECTION .data 
    var1: db 0x1  ; assign 1 to var1 
    var2: db 0x2  ; assign 4 to var2 
    var3: db 0x4  ; assign 6 to var3 
    var4: db 0x8  ; assign 8 to var4 

SECTION .bss 
        ; empty for now 

SECTION .text 
global _start 

_start: 

    nop      ; keep gdb happy 
    mov eax, [var1]   ; keep gdb happy 


... more code ... 

    mov eax, 1     ; clean up 
    mov ebx, 0 
    int 80H 

現在,當我在gdb打開我的計劃,並期待在eax中首次轉讓後,該值是0x10806,而不僅僅是爲0x1。這是爲什麼發生?

回答

3

eax寄存器是一個32位寄存器,變量是第8位值。當你嘗試在寄存器中讀取一個變量時,你會得到全部四個變量。

您可以使用32個變量與dd聲明,而不是db

var1: dd 0x1  ; assign 1 to var1 
var2: dd 0x2  ; assign 2 to var2 
var3: dd 0x4  ; assign 4 to var3 
var4: dd 0x8  ; assign 8 to var4 
+0

這麼簡單,然而卻是我逼瘋了一個小時...謝謝! – Sabien 2014-10-05 23:38:31

0

由於EAX是32位,並且您正在移動一個字節,因此只有AL被更改,寄存器的其餘部分將保留之前的值。我建議你先將EAX寄存器清零(例如xor eax, eax

相關問題