装配noob在这里。 我没有从回声中得到任何标准。
mov ah, 01h ;
int 21h ;
当我进行文件重定向时
program.asm<输入>输出
唯一输出的是我明确定义打印的内容。 但是当我在没有文件重定向的情况下运行我的程序时,我看到我输入的所有内容都没有问题。
我正在模仿DOSBox。
关于什么可能导致回声没有发生的任何想法?
答案 0 :(得分:1)
我的BIOS / DOS参考文件告诉以下有关DOS功能01h的信息 名称“键盘 InputWithEcho ”有点暗示即将出现的问题!
重定向STDIN和STDOUT时,使用此功能时可能会出现问题:
- 如果输入来自文件,则可能返回与扩展键盘代码不对应的零字节。
- 在V4之前的DOS版本中,该函数无法检测到文件的结尾。
当重定向STDIN以便从文件中检索输入时,这些注意事项可能会导致严重问题。因此,您可能需要使用不同的DOS输入函数:06h,07h,08h或3Fh(使用句柄0,STDIN时)。
由于您使用两种重定向( program.asm< input> output ),因此最好开始使用DOS函数08h。它提供了与01h功能最接近的匹配。 它不回显这一事实无关紧要,因为您仍希望将输出重定向到文件。
如果需要,请使用功能02h在屏幕上显示每个字符。
答案 1 :(得分:0)
如果要在控制台中打印一个字符,则需要使用DOS调用02h
并在DL
寄存器中设置要打印的ASCII代码:< / p>
示例:
mov ah,02h
mov dl,41h
int 21h