2014-05-22 106 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