dos彙編中的輸入輸入通常是用中斷來實現的。通常彙編教程都是把中斷放到後面講解的。這樣編排雖然很科學,但是剛開始學彙編的時候會感覺艱難苦恨,程式的執行結果只能用debug檢視,還不能人機互動。
這裡列舉幾個簡單的輸入輸出方式
1.字元輸出
使用int 21h中斷的02h號功能可以在螢幕輸出乙個字元,dl中存放要輸出字元的ascii碼。
如下**將在螢幕輸出乙個字元「a」
mov ah,02h
mov dl,'a'
int 21h
用於字元輸出的還有04h,05h,06h號功能等。
04h號功能可以輸出到輔助裝置
05h號功能可以輸出到印表機
06h號功能既可以輸入也可以輸出
2.字元輸入
使用int 21h中斷的01h號功能可以接受乙個字元,al存放輸入字元的ascii碼。
如下**將在等待螢幕輸入乙個字元
mov ah,01h
int 21h
此外還有07h,08h號等功能也可以接受字元輸入,他們的區別是
01h號功能過濾掉控制字元,並回顯
這時如果輸入控制字元會顯示一些出奇怪的圖案
07h號功能不過濾掉控制字元,不回顯
08h號功能過濾掉控制字元,不回顯
這些輸入功能可以暫停程式,當簡易的斷點使用
3.字串的輸出
使用int 21h中斷的09h號功能,ds:dx為要輸出字串的位址,字串以'$'字元作為結束標誌
如下**將"abcdefg"輸出
資料段中定義字串
str db 'abcdefg$'
**段中輸出字串
mov dx,offset str
mov ah,09h
int 21h
因為是以'$'作為結束標誌,所以輸出的字元裡不可以有'$'。到win32彙編就是用0做結束標誌,所以沒這個問題。不知道dos彙編有沒有方法輸出帶'$'字元的字串,如果沒有就只能自己將每個字元依次輸出了。
4.字串的輸入
使用int 21h中斷的0ah號功能等待接收乙個字串,在遇到回車後輸入並回顯。同樣dx:ds為乙個儲存字串的緩衝區。
緩衝取要求第乙個位元組為緩衝區的最大容量,第二個位元組在接收到字串後將放置實際輸入字串的大小,字串的內容從第三位元組開始。
如下**等待接收乙個字串
在資料段中定義乙個緩衝區
str db 64,?,64 dup('$')
在**段中等待接收
mov dx,offset str
mov ah,0ah
int 21h
接收到的字串沒有結束標誌,如果接收後直接用09h號功能輸出會看到好多亂碼。
所以若要用09號功能輸出可以在緩衝區初始化時在緩衝區裡填充'$',可是如果這個這個緩衝區要多次接收長度不等的字串最好每次接收前將緩衝區初始化一遍,以免前乙個字串將'$'覆蓋了一部分。也可以通過緩衝區第二位元組的資料找到字串末尾,將後面乙個位元組置為'$'。
另外雖然按回車鍵接收,但不會換行,需在接收後自行換行,以免回顯內容被後面的輸入內容覆蓋。
彙編好像沒有格式化輸出之類的中斷功能什麼的,只能自己用迴圈取餘數轉換為字元輸出了。
如過想要更複雜的輸入輸出操作可以使用bios中斷中的int 10h(顯示服務),int 16h(鍵盤服務)。
彙編 DOS功能呼叫 常用輸入輸出
ah 01h,輸入乙個字元並回顯 al 輸入的字元 說明 若按enter鍵,吸收的是回車符 cr 0dh或13 換行符 lf 不吸收 ah 07h,輸入乙個字元不回顯 al 輸入的字元 ah 02h,輸出乙個字元 dl 待輸出的字元 ah 09h,輸出字串 ds dx指向字串首位址 字串以 24h ...
常用的DOS功能輸入輸出
單個字元輸入mov ah,1 int 21h單個字元輸出mov dl,字元 mov ah,2 int 21h輸入字元後回顯mov ah,1 int 21h mov dl,al mov ah,2 int 21hds dx 位元組緩衝區的首位址 mov ah,0ah int 21h 前提 提前設定緩衝區...
簡單檔案輸入輸出
為了向乙個文件寫入資料,需要建立乙個ofstream型別的物件 ofstream output 為了指定要寫入的檔案。需要呼叫output物件的open函式 如下所示 output.open number.txt 此語句會建立乙個名為number.txt的檔案,如果檔案已經存在,其內容會被銷毀,並建...