如何索引 malloc'd 缓冲区和输出



在此处查看完整代码。

我已经用fread调用填充了一个缓冲区(malloc'd),这是一个成功。我现在正在尝试迭代缓冲区并开始解析输入。我试图通过遍历缓冲区并将每个字符输出到屏幕上来开始非常简单。但我的循环只是输出整个输入。下面是代码的循环部分:

mov     ecx,    0
mov     ebx,    buffer
.readByte:
    push    DWORD   [ebx + 1 * ecx]
    push    DWORD   ecx
    push    DWORD   char
    call    _printf
    add     esp,        12
    incr    ecx
    cmp     ecx,        [fsz]
    jge     .endRead
    jmp     .readByte

在 (s1.txt) 中读取的源文件的内容为:

1 + 2;

我的目标是简单地输出:

1

+

阿拉伯数字
;

既然你使用了%s格式,它表示一个字符串,并且没有长度说明符,你为什么期望它只打印一个字符?您应该尝试%c格式和类似movzx eax, byte [ebx + ecx]; push eax的东西来传递参数。%.1s格式说明符也可以工作,然后您可以保持参数传递。如果需要,也不要忘记添加换行符。当然,您也可以只使用putchar

哦,ecx是一个调用方保存的寄存器,因此您调用的任何函数都可能破坏其值。因此,如果您想继续使用它,则需要自己保存和恢复它。

最新更新