㈠ 匯編如何顯示鍵盤的輸入字元
直接寫顯存把,把ASCII寫到顯存里之後顯卡就會幫你把字元顯示出來了
比如在80×25,16色文本顯示模式(默認的顯示模式)下,往B800:0000寫30H的話,在第一行第一列就會顯示一個"0"
不過這種方法需要比較復雜的軟體支持
你可以通過10號中斷的03H子功能讀取游標位置,然後計算顯存地址,然後把AL中的ASCII MOV到顯存里
80×25,16色文本顯示模式的顯存格式是:
ASCII(位元組型數據)|前景及背景顏色(位元組型數據,白字黑背景是07H)
兩個位元組為一個單位,表示一個字元,然後就是這樣循環,來映射屏幕
==========================================================
對了,你是不是沒有設置好字元的屬性啊?
(9)、功能09H
功能描述:在當前游標處按指定屬性顯示字元
入口參數:AH=09H
AL=字元
BH=顯示頁碼
BL=屬性(文本模式)或顏色(圖形模式)
CX=重復輸出字元的次數
出口參數:無
要在BL里填07H才能顯示白字黑背景的字呢
================================================
通過寫顯存的方式顯示字元的例子,這個是在DOS下運行的,不過改一下的話估計就能在裸機上運行了,那個顯示字元的子過程沒保存用到的寄存器,注意一下
assume cs:code,ds:data
data segment
db 'Love WenDaoSheYu Forever!','#'
data ends
code segment
start:mov ax,000EH
int 10H
mov ax,0002H
int 10H
;-------全屏一下,不用按Alt+Enter了
mov ax,data
mov ds,ax
mov al,11001010B
xor bx,bx
mov dx,0604H
;-------"實參表"
call print
exit:mov ah,0
int 16H
mov ax,4C00H
int 21H
print:;(AL=字元屬性 DS=待顯示字元段地址)
;(BX=待顯示字元偏移地址 DH=行 DL=列)
;80×25字元顯示模式
;功能簡介:顯示以"#"結尾的一串字元
push ax
mov cx,0
mov cl,dh
dec cl
mov ax,cx
mov cl,160
mul cl
mov bp,ax
pop ax
;-------處理行信息
mov cl,dl
mov si,cx
dec si
shl si,1
;-------處理列信息
mov cx,0B800H
mov es,cx
;-------初始化顯存段寄存器
mov ah,[bx]
mov cl,'#'
pris:mov es:[bp+si],ah
inc si
mov es:[bp+si],al
inc si
inc bx
mov ah,[bx]
cmp ah,cl
jnz pris
;-------顯示字元串
ret
code ends
end start