问题描述
这是我的代码,它接受两个变量并将它们相加并减去它们。然后,它打印输出。为了简单起见,我删除了一些功能:
_start:
call _printfirstmsg
call _getvar1
call _printsecondmsg
call _getvar2
call _addvar1var2
call _printsum
call _subvar1var2
call _printdiff
call _dispvar1
call _dispvar2
mov rax,60
mov rdi,0
syscall
_printsum:
mov rax,1
mov rdi,1
mov rsi,addi
mov rdx,4
syscall
ret
_printdiff:
mov rax,subt
mov rdx,4
syscall
ret
_addvar1var2:
mov rax,[var1]
add rax,[var2]
mov [addi],rax
syscall
ret
_subvar1var2:
mov rbx,[var1]
sub rbx,[var2]
mov [subt],rbx
syscall
ret
当我运行该函数时,它没有返回 _printsum
和 _printdiff
的值,而是显示一些未知字符作为输出。请告诉我我错在哪里。
解决方法
_addvar1var2:
mov rax,[var1]
add rax,[var2]
mov [addi],rax
syscall
ret
您认为此加法代码中的 syscall
有什么作用? RAX
是这 2 个数字的总和,而不是函数编号。减法代码中的类似问题。
...它显示一些未知字符作为输出
您的 addi 和 subt 变量包含数字。在使用需要字符的函数输出它们之前,您必须先将它们转换为文本字符。
了解one way how to display a number
请阅读该问题下方的评论,以便您可以更正代码。