请参阅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
;
答案 0 :(得分:2)
由于您使用的%s
格式表示字符串,而没有长度说明符,为什么您希望它只打印一个字符?您应该尝试使用%c
格式和类似movzx eax, byte [ebx + ecx]; push eax
的内容来传递参数。 %.1s
格式说明符也可以工作,然后你可以保持你的参数传递。如果你想要,也不要忘记添加换行符。当然,您也可以使用putchar
。
哦,ecx
是一个调用者保存的寄存器,因此你调用的任何函数都可能会破坏它的值。因此,如果您想继续使用它,您需要自己保存并恢复它。