【发布时间】:2014-04-12 21:46:27
【问题描述】:
我刚开始学习汇编,但没有找到任何有用的内容。
我正在创建一个读取用户输入的简单程序,基本上:
section .bss
opA: resw 1
opB: resw 1
section .text
global _start
inputA:
mov EAX, 3
mov EBX, 0
mov ECX, opA
mov EDX, 1
int 80h
inputB:
mov EAX, 3
mov EBX, 0
mov ECX, opB
mov EDX, 1
int 80h
/*terminate*/
问题是在我输入第一个值并按回车后,第二个 sys_read 被跳过(我相信它正在读取 '\n' 字符)。
所以我尝试比较 opB 是否存储了 '\n',如果是肯定的情况,我会跳回 'inputB:',如下所示:
cpm word[opA], '\n'
je inputB
但它不起作用!我该如何解决这个问题?
更简单,如何从变量中删除换行符?
【问题讨论】:
-
你处理的是字节而不是单词。
-
可以调整标准输入,这样它就不会等待“输入”......但我认为你还不想解决它。最简单的可能是将 2 放入
edx并忽略换行(这假设讨厌的用户只输入一个字符并点击“回车”)。 -
已修复 @Jester,但仍无法使其工作。@Frank 确实有效,但我需要从变量中删除 '\n'。有什么想法吗?
-
“删除”它在什么意义上?
mov byte [ecx + eax - 1}, 0(在您的“int 80h”之后)将用零覆盖它。也许你想要什么?
标签: assembly x86 nasm line-breaks