打印总和时出现nasm输出问题

时间:2014-09-22 15:59:33

标签: assembly output nasm

我试图编写一个nasm程序来打印两个数字的总和,但是当我运行程序时,它并不打印总和。我正在运行最新的ubuntu,并从终端窗口执行程序。我不知道我在哪里出错了,但我认为它是实际印刷语句的问题。另外,我不能使用任何C库。

如果问题不在我认为的地方,我会包含所有代码:

SYS_EXIT  equ 1
SYS_READ  equ 3
SYS_WRITE equ 4
STDIN     equ 0
STDOUT    equ 1

segment .data 

msg1 db "Enter a digit ", 0xA,0xD 
len1 equ $- msg1 

msg2 db "Please enter a second digit", 0xA,0xD 
len2 equ $- msg2 

msg3 db "The sum is: "
len3 equ $- msg3

segment .bss

num1 resb 2 
num2 resb 2 
res resb 1    

section .text
global _start    ;must be declared for using gcc
_start:    ;tell linker entry point
mov eax, SYS_WRITE         
mov ebx, STDOUT         
mov ecx, msg1         
mov edx, len1 
int 0x80                

mov eax, SYS_READ 
mov ebx, STDIN  
mov ecx, num1 
mov edx, 2
int 0x80            

mov eax, SYS_WRITE        
mov ebx, STDOUT         
mov ecx, msg2          
mov edx, len2         
int 0x80

mov eax, SYS_READ  
mov ebx, STDIN  
mov ecx, num2 
mov edx, 2
int 0x80        

mov eax, SYS_WRITE         
mov ebx, STDOUT         
mov ecx, msg3          
mov edx, len3         
int 0x80

; moving the first number to eax register and second number to ebx
; and subtracting ascii '0' to convert it into a decimal number
mov eax, [num1]
sub eax, '0'
mov ebx, [num2]
sub ebx, '0'

; add eax and ebx
add eax, ebx
; add '0' to to convert the sum from decimal to ASCII
add eax, '0'

; storing the sum in memory location res
mov [res], eax

; print the sum 
mov eax, SYS_WRITE        
mov ebx, STDOUT
mov ecx, res         
mov edx, 1        
int 0x80
exit:    
mov eax, SYS_EXIT   
xor ebx, ebx 
int 0x80

更新:只要总和小于10,上面的代码就会生成一个准确的总和。我是一个完整的初学者,所以现在的问题是我如何允许总和大于10?

另外,这是输出:总和是:9amalee ***其中" amalee ***"使用终端窗口时代表我的用户名和位置。如何让它打印新行?我想出了这一部分。

我尝试将res resb 1更改为res resb 2,但没有帮助。

0 个答案:

没有答案