?? menu.asm
字號(hào):
;FILENAME: MENU.ASM
;內(nèi)容:光條式程序菜單設(shè)計(jì)
DISP MACRO X, LENGTH, COLOR ;定位顯示彩色字符串
MOV AX, 1301H
MOV BX, COLOR ;屬性字-BK
MOV CX, LENGTH ;串長(zhǎng)度→CX
MOV DH,YY ;行值→DH
MOV DL,X ;列值→DL
MOV BP, ADDR ;待顯串偏移地址→BP
INT 10H
ENDM
;------------------------------------------------------
DATA SEGMENT
L0 DB ' MENU '
L1 DB '========================='
L2 DB '| EXAMPLE 1 |'
L3 DB '| EXAMPLE_2 |'
L4 DB '| EXAMPLE_3 |'
L5 DB '| RETURN |'
L6 DB '========================='
LL EQU $-L6 ;LL為邊框長(zhǎng)度
XX EQU (80- LL)/2 ;XX為待顯串首字符列值
YY DB ? ;存放待顯串的行值
NN DW 1 ;記錄色帶的位置
TAB DW ?,L2,L3,L4,L5 ;存放菜單項(xiàng)偏移地址
ADDR DW ? ;存放待顯串偏移地址
DATA ENDS
;----------------------------------------------------------------
CODE SEGMENT
ASSUME CS: CODE, DS: DATA, ES: DATA
BEG: MOV AX, DATA
MOV DS, AX
MOV ES, AX
MOV AX, 3
INT 10H ;清屏
MOV YY,8 ;菜單起始行值→YY單元
MOV ADDR, OFFSET L0 ;L0偏移地址→ADDR單元
LAST2: DISP XX, LL, 0FH ;顯示一行菜單
ADD ADDR, LL ;下一串偏移地址→ADDR單元
INC YY ;下一菜單項(xiàng)行值→YY單元
CMP YY, 15
JL LAST2
MOV NN, 1
CALL COMPUTE
DISP XX+3,LL-6,51H ;令色帶覆蓋第1菜單項(xiàng)
SCAN: MOV AH, 1
INT 16H ;有鍵入?
JZ SCAN ;否,轉(zhuǎn)等待輸入
MOV AH, 0
INT 16H ;讀鍵盤緩沖區(qū)
CMP AH, 80
JE DOWN ;是向下箭頭鍵,轉(zhuǎn)下移處理
CMP AH, 72
JE UP ;是向上箭頭鍵,轉(zhuǎn)上移處理
CMP AL, 0DH
JE EXIT ;是回車,轉(zhuǎn)退出
JMP SCAN ;非法鍵,轉(zhuǎn)等待輸入
DOWN: CMP NN, 4
JE SCAN
CALL COMPUTE
DISP XX+3,LL-6,0FH ;令當(dāng)前色帶消失
INC NN ;(NN)+1→NN單元
CALL COMPUTE
DISP XX+3,LL-6,51H ;色帶下移1項(xiàng)
JMP SCAN
UP: CMP NN,1
JE SCAN
CALL COMPUTE
DISP XX+3,LL-6,0FH ;令當(dāng)前色帶消失
DEC NN ;(NN)-1→NN單元
CALL COMPUTE
DISP XX+3,LL-6,51H ;色帶上移1項(xiàng)
JMP SCAN
EXIT: MOV AL, BYTE PTR NN ;攜帶返回碼
MOV AH, 4CH
INT 21H ;返回批處理
;------------------------------------------------------
COMPUTE PROC ;計(jì)算子程序
MOV DI, NN
ADD DI,DI
MOV AX,TAB[DI]
ADD AX,3
MOV ADDR,AX ;待顯串偏移地址→ADDR單元
MOV AL, BYTE PTR NN
ADD AL,9
MOV YY,AL
RET
COMPUTE ENDP
CODE ENDS
END BEG
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -