Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 用于添加2个数字的64位汇编代码_Assembly_X86 64 - Fatal编程技术网

Assembly 用于添加2个数字的64位汇编代码

Assembly 用于添加2个数字的64位汇编代码,assembly,x86-64,Assembly,X86 64,我已经在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 .bs

我已经在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

这是因为中分配了内存空间

segment .bss
  num1 resb 2
  num2 resb 2
  res resb 2

编写同一函数的3个版本,而不是仅仅将3个不同的参数传递给同一个函数,这完全违背了创建函数的目的。无论如何,请注意10个两个字符与10+ASCII码(表示“0”)之间的差异。当然,这仍然是一个单位数的ASCII码。你需要一个能将整数转换成字符串的函数,这个问题已经被问了几百次了。要@PeterCordes point,请查找在汇编中编写的整数到ascii转换例程,或者调用同名的C运行时函数。顺便说一句,还有很多错误,比如没有为num1和num2保留足够的内存空间。。。您完全不知道值是如何存储在计算机中的,以及常见数据类型的大小。读一些关于它的东西。