DOS 01h中断在EOF时的读字符行为及^Z标记规范问询
关于DOS中断AH=01h实现cat程序的疑问
问题解答
- 用AH=01h中断实现cat程序时,在标准输入末尾:真实DOS环境下,当读到^Z(ASCII码1Ah,DOS惯例的标准输入结束标记)后,AH=01h会把AL寄存器设为1Ah,程序会回显这个字符;之后再次调用该中断,会一直返回1Ah并持续回显这个字符。
- DOS环境里确实惯例用^Z(ASCII 1Ah)标记标准输入的结束,这是DOS/CPM时期遗留的文本文件结束标识。
emu2测试异常说明
用命令 emu2 doscat.com < input.txt 测试时,程序会持续打印FFh,这是因为emu2是基于C语言开发的模拟器,它会把C标准库中的EOF(值为-1)直接映射给DOS中断的模拟逻辑。而-1在8位寄存器AL中就是FFh,所以每次调用AH=01h都会返回FFh,导致程序不断回显这个字符。
程序代码
section .text start: mov ah, 01h ; 从标准输入读取字符并回显 int 21h ; 调用DOS服务 jmp start
内容的提问来源于stack exchange,提问作者qwr
相关产品推荐
相关产品推荐

