Assembly addition program

  Kiến thức lập trình

i have the following code

section .bss
num1 resb 2
num2 resb 2
res1 resb 2
res2 resb 2

section .data
fir dw ‘Ingrese el primer numero: ‘
lfir equ $ – fir
sec dw ‘Ingrese el segundo numero: ‘
lsec equ $ – sec

newline db 10

section .text
global _start

_start:
mov dl,lfir ;print “Ingrese el primer numero: ”
mov ecx,fir
mov bl,1
mov al,4
int 0x80

mov dl,5        ;read the first number
mov ecx,num1
mov bl,2
mov al,3
int 0x80

mov dl,lsec     ;print "Ingrese el segundo numero: "
mov ecx,sec
mov bl,1
mov al,4
int 0x80

mov dl,5        ;read the second number
mov ecx,num2
mov bl,2
mov al,3
int 0x80

mov eax,[num1]  ;move the first number into eax
mov ebx,[num2]  ;move the second number to ebx
sub ebx,48      ;conver the number to decimal
add eax,ebx     ;add the 2 numbers
mov [res1],eax  ;move the result into "res1"

cmp eax, 57 ;check if the result has 2 digits
jle singledigit ;instructions when it has 2 digits

mov eax,[res1]
sub eax,10
mov [res1],eax
mov ebx,'1'
mov [res2],ebx

mov dl,2        ;print res2
mov ecx,res2
mov ebx,1
mov eax,4
int 0x80

mov dl,2        ;print res1
mov ecx,res1
mov ebx,1
mov eax,4
int 0x80

jmp finish

singledigit:
mov dl,2 ;print res1
mov ecx,res1
mov ebx,1
mov eax,4
int 0x80

jmp finish

finish:
mov dl,1 ;new line
mov ecx,newline
mov ebx,1
mov eax,4
int 0x80

mov al,1
int 0x80

It seems like it will always ignore the singledigit label, and therefore prints ascii characters below 48 (ascii 0) when the sum is less than 10, but it works fine when the sum is greater than 10

New contributor

Fotatata is a new contributor to this site. Take care in asking for clarification, commenting, and answering.
Check out our Code of Conduct.

LEAVE A COMMENT