我試圖創建一個繪圖程序,在當前光標位置顯示一個塊字符(ASCII 219)。向上,向下,向左和向右鍵用於在屏幕上導航。假設F1,F2,F3和F4改變顏色。退出鍵退出程序。使用功能鍵時,顏色不會像我所期望的那樣變化。我的代碼如下:更改控制檯文本的顏色
org 100h
kol db 12
wiersz db 10
kolor db 1111b
kursor:
mov ah,3
mov bh,1
mov dh,byte [wiersz]
mov dl,byte [kol]
int 10h
mov bl,15
int 10h
petla:
; Get keystroke
mov ah,0
int 16h
; AH = BIOS scan code
cmp ah,48h
je gora
cmp ah,50h
je dol
cmp ah,4Bh
je lewo
cmp ah,4Dh
je prawo
cmp ah,3Bh
je F1
cmp ah,3Ch
je F2
cmp ah,3Dh
je F3
cmp ah,3Eh
je F4
cmp ah,3Fh
je F5
cmp ah,1
jne petla ; loop until Esc is pressed
mov ah,0x4c
int 0x21
gora:
sub byte [wiersz],1
mov ah,2
mov bh,0
mov dh,byte [wiersz]
mov dl,byte [kol]
int 10h
mov ah,09h
mov al,219
mov bx,kolor
mov cx, 1
int 10h
jmp petla
dol:
add byte [wiersz],1
mov ah,2
mov bh,0
mov dh,byte [wiersz]
mov dl,byte [kol]
int 10h
mov ah,09h
mov al,219
mov bx,kolor
mov cx, 1
int 10h
jmp petla
lewo:
sub byte [kol],1
mov ah,2
mov bh,0
mov dh,byte [wiersz]
mov dl,byte [kol]
int 10h
mov ah,09h
mov al,219
mov bx,kolor
mov cx, 1
int 10h
jmp petla
prawo:
add byte [kol],1
mov ah,2
mov bh,0
mov dh,byte [wiersz]
mov dl,byte [kol]
int 10h
mov ah,09h
mov al,219
mov bx,kolor
mov cx, 1
int 10h
jmp petla
F1:
mov byte [kolor], 0111b
int 21h
jmp petla
F2:
mov byte [kolor], 1001b
int 21h
jmp petla
F3:
mov byte [kolor], 0010b
int 21h
jmp petla
F4:
mov byte [kolor], 1011b
int 21h
jmp petla
F5:
mov byte [kolor], 1100b
int 21h
jmp petla
當程序運行用箭頭在屏幕上光標的移動,但塊字符沒有出現,而且顏色不改變。任何人都可以解釋爲什麼這個問題可能發生,以及我可能如何解決這個代碼?
軟件設計提示:請查找表不同的密鑰不同的結果映射,而不是也重複使用代碼價值。檢查掃描碼是你正在尋找的掃描碼之一,然後減去最低值(因此你的數組不是以一堆填充開始的)。請參閱http://stackoverflow.com/a/32356125/224132瞭解gcc如何優化出現在測試集合中某個值的'switch'上的地獄。如果掃描代碼不夠密集以使數組很好,那麼您仍然可以分支設置值,並將int 10h insn(BIOS調用?)分解出來。 –
我無法幫助您使用實際的控制檯文字顏色的東西;我沒有使用裸機或DOS代碼。僅針對用戶空間Linux中的性能進行優化。 –