我已经用64位程序集编写了这个程序来添加两个数字。它适用于1位数字,但不适用于2位数字。
我的代码出了什么问题?
segment .data
msg1 db "Enter a digit", 0xA, 0xD
len1 equ $- msg1
msg2 db "Please enter the 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 2
segment .text
global _start
_start:
call _text1
call _getName1
call _text2
call _getName2
call _text3
mov rax, [num1]
sub rax, '0'
mov rbx, [num2]
sub rbx, '0'
add rax, rbx
add rax, '0'
mov [res], rax
mov rax, 1
mov rdi, 1
mov rsi, res
mov rdx, 2
syscall
mov rax, 60
mov rdi, 0
syscall
_text1:
mov rax, 1
mov rdi, 1
mov rsi, msg1
mov rdx, len1
syscall
ret
_getName1:
mov rax, 0
mov rdi, 0
mov rsi, num1
mov rdx, 2
syscall
ret
_text2:
mov rax, 1
mov rdi, 1
mov rsi, msg2
mov rdx, len2
syscall
ret
_getName2:
mov rax, 0
mov rdi, 0
mov rsi, num2
mov rdx, 2
syscall
ret
_text3:
mov rax, 1
mov rdi, 1
mov rsi, msg3
mov rdx, len3
syscall
ret
答案 0 :(得分:0)
这是因为
中分配的内存空间segment .bss
num1 resb 2
num2 resb 2
res resb 2