如何索引 malloc 的缓冲区和输出
How to index malloc'd buffer and output
我已经用 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
是调用者保存的寄存器,因此您调用的任何函数都可能破坏它的值。所以如果你想继续使用它,你需要自己保存和恢复它。
我已经用 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
是调用者保存的寄存器,因此您调用的任何函数都可能破坏它的值。所以如果你想继续使用它,你需要自己保存和恢复它。