让我简单解释一下:)。我通过使用 EBP 寄存器和 ebx 寄存器来处理参数 10,因为它的堆栈结构包含 EBP(基址寄存器)、返回地址、参数#、参数 1、参数 2...因为我不使用本地注册。我可以看到参数被正确输入,因为我可以使用 call print_string 打印它。但是,由于 代码行,似乎没有为推荐行读取字符串 10 。我会轻轻地问从哪里开始编写代码。谢谢阅读。输入:./atoi 10结果:10%include "asm_io.inc" segment .data segment .bss input resw 1 segment .text global mainmain: enter 0,0 pusha mov ebx, [ebp+12] mov eax, [ebx+4] ; call print_string dump_stack 1,2,4 mov ebx, 0 mov ecx, 10while: cmp al, 0x0a je print sub eax, 0x30 mov [input], eax mov eax, ebx mul ecx add eax, [input] mov ebx, eax jmp whileprint: mov eax, ebx call print_int call print_nl popa mov eax, 0 leave ret 最佳答案 您的 while 循环不读取任何字符!您可以使用 mov dl,[eax] 检索这些。从下面的代码可以看出,不需要使用临时输入变量。 xor ebx, ebx ;Resultwhile: movzx edx, byte ptr [eax] ;Read 1 character test dl, dl ;Test for end of string jz print ;End found sub dl, 0x30 ;Go from character to value [0,9] imul ebx, 10 ;Result x10 add ebx, edx ;Add new digit inc eax ;To next character jmp while关于assembly - 在命令行中传递参数,汇编编程,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37640742/
10-11 15:40