嘗試從輸入中為坐標X設定一個值,但是當我測驗結果時,似乎X的坐標是隨機的,因為它顯示在 CMD 的底部。如何將輸入的值傳遞到 DH 暫存器?似乎沒有傳遞我想要的值,而是傳遞了一些隨機的 ASCII 代碼。
mov ah,1;read value from input
int 21h
mov dh,al;Trying to pass a value from input x coordinate
mov dl,10 ;y coordinate
mov ah, 02h ;output
int 10h ;bios interruption
mov al, '1'
mov ah, 0Eh
int 10h
mov dx,offset test
mov ah,9
int 21h
這是示例:為X輸入值 5 。其他數字只是已經設定的坐標,例如:
mov dh,4
mov dl,10

uj5u.com熱心網友回復:
DOS.GetKey 函式 01h 在 AL 暫存器中為您提供一個 ASCII 碼,例如。如果用戶按下5,則 AL 將包含 53。如果它是您所追求的值 5,則只需減去 48。因為“0”的 ASCII 碼是 48,所以您可以將此轉換寫為
sub al, '0'.mov ah, 01h ; DOS.GetKey int 21h ; -> AL sub al, 48BIOS.SetCursorPosition 函式 02h 期望您在 DL 中獲得所需的列,在 DH 中獲得所需的行,以及在 BH 暫存器中使用的顯示頁面。您從代碼中省略了 BH,并且錯誤地顛倒了 DL 和 DH 暫存器的含義。另外,在處理字符輸出時,我們不討論X和Y,而是討論Column和Row。
mov dl, al ; Column from input mov dh, 10 ; Row mov bh, 0 ; DisplayPage mov ah, 02h ; BIOS.SetCursorPosition int 10hBIOS.Teletype 函式 0Eh 還期望在 BL 中使用顏色,以防顯示幕處于圖形模式,并在 BH 中使用顯示頁面。如果
Teletype緊跟在SetCursorPosition之后,則無需重復設定 BH。mov bx, 0007h ; DisplayPage BH=0, GraphicsColor BL=7 (White) mov ax, 0E31h ; BIOS.Teletype AH=0Eh, Character AL='1' (49) int 10h
雖然emu8086仿真器不支持BH中的DisplayPage引數,但是你應該學習并使用官方的BIOS api。那么至少你的程式在emu8086之外運行時會有機會......
uj5u.com熱心網友回復:
您正在從標準輸入中讀取一個字符。您首先需要將其轉換為數字:
mov ah,1 ;read value from input
int 21h
sub al, '0'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/519519.html
上一篇:交換陣列內容時的效率
