我想将字符串转换为整数 例如,当我在字符串中键入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
答案 0 :(得分:2)
通过分析,不运行,看起来你的逻辑是错误的。在第二次循环迭代中,您将eax
等于1,因此在将其乘以10
(ebx
)之后,您将生成等于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建议的内容。