You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 11:00:46