2014-10-03 82 views
0

我是彙編語言的新手。 我想用這段代碼添加兩個數字;這些值是硬編碼的。 我正在使用「nasm」,並且我正在成功構建可執行文件。 當我運行它時,它沒有輸出。 我開始知道,如果這個值是一個整數,就像這種情況下兩個數字的總和一樣,我們需要將它轉換爲字符串來使用sys_write寫入。 如果這是唯一需要照顧的事情,我該怎麼做?如果沒有,爲什麼我不能在stdout上看到輸出,即使我可以使用gdb在寄存器中看到輸出?使用Nasm的彙編語言

global _start 
section .text 
_start: 

mov eax,0x3 
mov ebx,0x5 
add eax,ebx 
mov ecx,eax 
mov eax,0x4 
mov ebx,0x1 
mov edx,0x1 
int 0x80 

mov eax,0x1 
mov ebx,0x0 
int 0x80 

segment .data 
sum db 0x00 

回答

2

要調用的write系統調用看起來像這樣:包含要印什麼,你通過得到的數字

ssize_t write(int fd, const void *buf, size_t count); 

而不是一個指針到緩衝區。這是行不通的。此外,你的號碼是二進制的,而不是文本。作爲單個數字號碼的快速修復,您可以添加0的ascii代碼,並將結果字符放入內存中進行打印。你可以使用這個堆棧。

global _start 
section .text 
_start: 

mov eax,0x3 
mov ebx,0x5 
add eax,ebx 
add al, '0' ; convert to text 
push eax  ; store on stack 
mov ecx,esp ; pass its address for printing 
mov eax,0x4 
mov ebx,0x1 
mov edx,0x1 
int 0x80 
add esp, 4 ; free stack space 

mov eax,0x1 
mov ebx,0x0 
int 0x80 

segment .data 
sum db 0x00