64位汇编代码添加2个数字

问题描述 投票:0回答:2

我用 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
assembly x86-64
2个回答
1
投票

这是因为

中分配的内存空间
segment .bss
  num1 resb 2
  num2 resb 2
  res resb 2

0
投票

您需要检查输入的数字是否大于或等于 9,然后您需要减去 rax,'07' 否则您需要减去 rax,'00'。

© www.soinside.com 2019 - 2024. All rights reserved.