2014-10-05 74 views
0

我想在NASM(Linux)中添加兩位數字。要添加兩個簡單的數字,我用下面的代碼:在NASM(Linux)中添加兩位數字

section .text 
    global _start ;must be declared for using gcc 
_start: ;tell linker entry point 
    mov  eax,'3' 
    sub  eax, '0' 
    mov  ebx, '4' 
    sub  ebx, '0' 
    add  eax, ebx 
    add eax, '0' 
    mov  [sum], eax 
    mov ecx,msg 
    mov edx, len 
    mov ebx,1 ;file descriptor (stdout) 
    mov eax,4 ;system call number (sys_write) 
    int 0x80 ;call kernel 
    mov ecx,sum 
    mov edx, 1 
    mov ebx,1 ;file descriptor (stdout) 
    mov eax,4 ;system call number (sys_write) 
    int 0x80 ;call kernel 
    mov eax,1 ;system call number (sys_exit) 
    int 0x80 ;call kernel 

section .data 
    msg db "The sum is:", 0xA,0xD 
    len equ $ - msg 
    segment .bss 
    sum resb 1 

代碼的結果是7.But當我扛在寄存器EAX forexample結果17號不correct.In這種情況下5.Tell我請問是什麼問題?謝謝!

回答

2

下面是您的一些清理示例,以幫助您更輕鬆地閱讀。

建議:這種一致性將大大提高你的公衆形象。

但是,嘿;漂亮的評論,我能讀懂你的代碼並理解它(這就是爲什麼我決定回答你)

section .text 

global _start    ;must be declared for using gcc 

_start:      ;tell linker entry point 

    mov  eax, '3' 
    sub  eax, '0' 
    mov  ebx, '4' 
    sub  ebx, '0' 
    add  eax, ebx 
    add  eax, '0' 

    mov  [sum], eax 

    mov  ecx, msg 
    mov  edx, len 
    mov  ebx, 1   ;file descriptor (stdout) 
    mov  eax, 4   ;system call number (sys_write) 
    int  0x80   ;call kernel 

    mov  ecx, sum 

    mov  edx, 1 
    mov  ebx, 1   ;file descriptor (stdout) 
    mov  eax, 4   ;system call number (sys_write) 
    int  0x80   ;call kernel 

    mov  eax, 1   ;system call number (sys_exit) 
    int  0x80   ;call kernel 


section .data 

    msg  db    "The sum is:", 0xA,0xD 

    len equ $ - msg 

    segment .bss 

    sum resb 1 

現在沒事了,至於你的評論,」 ... 但是當我攜帶EAX寄存器17號例如結果不正確

我可以想象!

問題,當你「......在寄存器EAX攜帶17號......」你做這樣的嗎?...

Mov  Eax,"17" 

如果是這樣,放慢腳步,看看在你的代碼中一次通過調試。

我相信,你會看到的是,你實際上是在做這個...

Mov  Eax, 3137h 

雖然這可能是

Mov  Eax, 3731h 

有趣的概念。我從來沒有做過這樣的事情。隨你。

更重要的是,如果你使用這個地方來存儲相同數量的...

sum resb 1 

你只有一個字節。

最好我可以告訴你,你的示例代碼僅限於單個數字的數字。

現在,由於您的標籤sum只保留了一個字節; 8位,你可以看到問題,因爲你在那裏存儲32位數據。 (好吧,你正在嘗試;它不會工作。)不知道你做那件事情會發生什麼。你可能想重新考慮這個結構。

至於17爲什麼變成5,這裏沒有線索。

讓我們知道這是否有助於你。大會是偉大的東西。正如你親身體驗的那樣,最初的思維調整對於大腦來說可能很奇怪,不可以!