呼叫DOS系統功能呼叫表(INT 21H),輸入一個字元,輸出兩個字元結果

這是群裡某個群友提的問題,就是說呼叫Dos系統功能表,然後輸入一個字元,輸出了兩個字元的結果。

然後我運行了程式碼出來結果發現確實如此

查了系統功能表

彙編程式碼是沒錯的。

群裡有人也看了一下,給出的意見是第一個不是程式顯示的,是模擬器顯示的,第二個顯示的才是程式裡程式碼顯示的。

去掉第二個int 21h就只出現一個字元,剛好是我們想要的結果。

其實也不需要過多糾結於這個,只要充分理解每一句彙編程式碼即可。

mov ah,1   ;1號功能,鍵盤輸入,鍵入的值在al

int 21h

mov ah,2   ;2號功能,顯示一個字元

mov dl,al   ;顯示的字元要放入dl,顯示al的值

int 21h

這麼看下來,我覺得是程式碼是沒錯的,至於為什麼顯示兩個字元跟預期的不一致,我個人覺得確實應該是dosbox模擬器的問題,不要因為去掉第二個int 21h就是你想要的結果,然後你就真的把第二個int 21h這句程式碼去掉,我覺得這樣子的話可能就有損學習的那種科學觀。當然如果有人知道原因,或者說感覺是哪個方面的問題,也可聯絡我。