2014-05-22 73 views
-1

作为一种心理练习,我重新熟悉DOS汇编程序。我设置了DOSBox来编写和测试程序,并注意到它缺少一个“更多”命令,所以我决定写我自己的。一般流程是:在命令行DOS汇编程序从管道读取

  1. 读取参数
  2. 命名的命令行(3DH,INT 21H)
  3. 读取文件到内存(3FH,INT 21H)
  4. 关闭文件打开文件(3EH,INT 21H)
  5. 显示文件23行的时间,暂停对空格键或q
  6. 退出

当文件名作为参数运行时,该程序运行良好。然后我想将它扩展到重定向输入,所以我添加了一个测试来查看stdin是否有任何数据(函数0bh,int 21h),如果是,则将stdin的文件句柄设置为0。

问题是,一旦数据读入缓冲区并且文件关闭,按键不起作用(仍在重定向?)文件的前23行随“更多”提示一起显示,但之后就卡住了。获取重定向输入并仍能访问键盘的正确方法是什么?

+0

也许不是你正在寻找的解决方案,但是如何从端口'60H'读取你的提示以获得扫描码(假设你的方案仍然有效)? – Michael

+0

这是一个好主意。不过,我仍然想知道,是否有一个用于处理重定向stdin的“最佳做法”。 – Mechatechzilla

回答

1

您可以使用BIOS中断0x13来读取键盘。

当使用中断0x21读取键盘时,真正的MS-DOS将间接调用中断0x13。

我不确定DOSBox是否支持中断0x13。

+0

你的意思是中断16h。 13h是磁盘接口...... DOSBox应该支持它,因为如果没有BIOS中断支持,将很难运行任何DOS程序。这是一个罕见的任何复杂的应用程序,至少有几个BIOS调用! –

+0

我结束了使用BIOS int 16h。它的确有窍门。谢谢你提醒我。有一阵子了。 – Mechatechzilla