windows - 如何索引 malloc 的缓冲区和输出

标签 windows assembly buffer nasm

参见 full code here .

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

+

2
;

最佳答案

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

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

关于windows - 如何索引 malloc 的缓冲区和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29757231/

相关文章:

windows - 如何在不损坏字符的情况下输出exec.Command的输出数据

windows - 如何在打开方式对话框中启用 “Always use the selected program to open this kind of file” 选项

windows - 如何判断我的 Perl 脚本是否在 Windows 下运行?

linux - ARB组件如何组装

iphone - ARM/iOS 处理器上相当于 'int 3'

javascript - 如何从 CMD dir 命令中删除每行的前 30 个字符,并在 javascript 中为每个字符执行脚本写入?

assembly - 为什么某些 SSE "mov"指令指定它们移动浮点值?

c - "Marking"C 中的指针与 "attributes"

C - strcpy 的一般使用

python - 在编写时更新 Tkinter 文本小部件,而不是在类(class)结束后更新