-4
我已經在64位彙編中編寫了這個程序來添加兩個數字。它適用於1位數字,但不適用於2位數字。64位彙編代碼添加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
寫入3個版本相同的功能,而不是隻是路過3個不同的參數傳遞給相同功能的完全違背了功能的目的而分配的存儲空間。 –
無論如何,請注意「10」(兩個字符)和10 +「0」的ASCII碼之間的區別。這當然仍然是一位數的ASCII碼。你需要一個可以將一個整數轉換爲一個字符串的函數,並且這個問題已經在SO上被提出了數百次。 –
要查看@PeterCordes點,請查看以集合編寫的'itoa'(整數到ascii)轉換例程 - 或 - 調用同名的C運行時函數。 –