汇编中的字符串到整数

时间:2017-05-13 03:04:10

标签: assembly x86 type-conversion nasm

我想将字符串转换为整数 例如,当我在字符串中键入1234时,它将转换为整数1234。 但是,当我输入1234时,结果只有12个出现,我不知道是什么问题。

%include "asm_io.inc"

segment .bss
string  resb    32


segment .text
global  main

main:

  enter 0,0     ; setup stack frame
  pusha

  mov   edx, 0
  mov   ecx, 0
  mov   ebx, 0

repeat: call    read_char

  sub   eax, 48
  mov   esi, eax
  mov   eax, ecx
  mov   ebx, 10
  mul   ebx
  mov   ecx, eax
  add   ecx, esi
  mov   byte [string+edx], al

  cmp   al, 0x0a
  jne   repeat
  mov   byte [string+edx-1], 0

  mov   eax, ecx
  call  print_int
  call  print_nl

  popa
  mov   eax, 0  ; return value
  leave         ; leave stack frame
  ret

1 个答案:

答案 0 :(得分:2)

通过分析,不运行,看起来你的逻辑是错误的。在第二次循环迭代中,您将eax等于1,因此在将其乘以10ebx)之后,您将生成等于Enter的ascii值的结果 - { {1}}(10dec)。

您应该在阅读字符后立即移动支票输入值。所以试着让你的循环像这样

0x0a

我认为可能还有其他一些问题,因为我不知道repeat: call read_char cmp al, 0x0a je exit_loop // exit the loop if enter //code as before jmp repeat //jump unconditionally to the beginning of the loop exit_loop: mov byte [string+edx-1], 0 会在哪里增加。

但正如我写的那样 - 它仅仅通过分析实际运行。你有程序和调试器。调试它!逐步完成代码,分析寄存器并确认Michael Petch建议的内容。