【发布时间】:2013-09-26 03:03:22
【问题描述】:
我正在编写一个简单的 NASM 汇编程序。我已经弄清楚了大约 95%。但是,我遇到了一个我似乎无法弄清楚的问题。点击 ctrl-d 应该显示再见消息,然后终止程序。这是我所拥有的骨架
Section .bss
Buff resb2
BuffLen equ $-Buff
loop:
; some code
mov ecx, Buff
move edx, BuffLen
; some code
cmp ecx, 0x04
je Exit
jne loop
根据ASCII图表,ctrl+d是0x04。我一定错过了一些简单的东西。有人有什么想法吗?
【问题讨论】:
-
1) 您的程序是否适用于其他代码,尤其是可打印代码? 2) 根据您用于与程序交互的终端类型,CTRL-D 可能会被困在那里或被翻译。
-
除了 Chris 提到的内容之外,您还将
ecx(Buff的地址)与0x04进行比较。不大可能!试试cmp byte [ecx], 0x04。 -
抱歉反应慢,正在写另一个作业。我尝试使用 ctrl_j (0x0A) 并让它正常工作。这让我相信 ctrl+d 出了点问题。弗兰克,我也实施了你的建议。
-
要检查 Chris Stratton 是否正确,您可以尝试 C 程序并检查 C 程序是否读取 Ctrl+D。
-
在 Unix/Linux 上的 C 程序中,ctrl-D 将作为标准输入的 EOF 通过。所以操作系统正在解释它,而不仅仅是通过
0x04。