1,這個程序只識別三個鍵:光標左鍵、光標右鍵、Esc鍵;
2.按光標左鍵或光標右鍵執行相應的功能;按Esc鍵結束程序。
;這個程序通過編譯正確運行。
代碼段
假設CS:Code,DS:Code
;-
;函數:顯示指定地址的字符串(Str_Addr)
;入口:
;Str_Addr= =字符串地址(數據段中需要)
;用法:輸出字符串地址
;用法示例:Output PromptStr
輸出宏字符串地址
lea dx,Str _地址
mov ah,9
int 21h
EndM
;-
;功能:設置光標位置
;Entry: Cursor_Row=行坐標;遊標_列:列坐標)
SetCursor前進到附近
推CX
推BX
推斧
MOV DH,Cursor_Row
MOV DL,光標_列
BX XOR BX
MOV啊,2
INT 10H
爆破筒
波普·BX
波普·CX
浸水使柔軟
Cursor_Row DB 21
遊標_列數據庫36
SetCursor結束
;-
KBEsc equ 11BH
KBLeft equ 4BH
KBRight equ 4DH
字符串db ' & lt-& gt;$'
開始:推送cs
流行數碼相機
推送cs
pop es使數據段、附加段和代碼段成為同壹個段。
xor有限公司
mov啊,8;讀取光標位置的字符和屬性。
int 10h
mov bh,啊;保存字符屬性值
Disp_Str:調用SetCursor設置光標位置
輸出字符串;顯示字符串
Read_Key: xor啊,啊
int 16h;接收鍵
cmp ax,KBEscEsc?
jz出口_過程;結束程序並返回操作系統。
cmp ah,KBLeft向左箭頭?
jnz $+10;不,轉過去看看妳是否按了右鍵。
mov word ptr Inc_or_Dec,0efeh是的,當前列號是負1。
jmp光標_移動
cmp啊,KBRight右箭頭?
jnz Read _ Key否,接收下壹個按鈕。
mov word ptr Inc_or_Dec,06feh是,將1加到當前列號上。
Cursor_move:mov bl,ah;保存關鍵點方向
推動bx
xor有限公司
mov啊,3;取當前光標位置和窗口右下角的坐標。
int 10h
pop bx
inc dl列號加1
mov ch,Cursor _ Row窗口左上角的行號
mov cl,Cursor _ Col窗口左上角的列號
。如果bl = = KBLeft & amp& ampcl = = 0;按左按鈕,但是已經到了最左邊,不動了。
jmp讀取密鑰
。ENDIF
。IF bl = = KBRight & amp& ampdl = = 79右鍵,但是已經到了最右邊,不動了。
jmp讀取密鑰
。ENDIF
mov啊,7;窗口顯示內容向下滾動。
mov al,1;向下滾動壹行。
int 10h
Inc_or_Dec: inc遊標_ Col當前列號是負1或正1。
jmp顯示_字符串
Exit_Proc: mov ah,4ch結束程序
int 21h
代碼結束
結束開始;這是編譯的結尾