如何在 NASM 中添加两个变量?

问题描述

这是我的代码,它接受两个变量并将它们相加并减去它们。然后,它打印输出。为了简单起见,我删除了一些功能

_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 个数字的总和,而不是函数编号。减法代码中的类似问题。

...它显示一些未知字符作为输出

您的 addisubt 变量包含数字。在使用需要字符的函数输出它们之前,您必须先将它们转换为文本字符。

了解one way how to display a number
请阅读该问题下方的评论,以便您可以更正代码。