.MODEL SMALL
.STACK 64
.DATA
TOPROW EQU 08
BOTROW EQU 15
LEFCOL EQU 26
ATTRIB DB ?
ROW DB 00
SHADOW DB 19 DUP (0DBH)
MENU DB 0C9H, 17 DUP (0CDH), 0BBH
DB 0BAH, ' ADD RECORD ',0BAH
DB 0BAH, ' DELETE RECORDS ',0BAH
DB 0BAH, ' ENTER ORDERS ',0BAH
DB 0BAH, ' PRINT REPORT ',0BAH
DB 0BAH, ' UPDATE ACCOUNTS ',0BAH
DB 0BAH, ' VIEW RECORDS ',0BAH
DB 0C8H, 17 DUP (0CDH), 0BCH
PROMPT DB 'TO SELECT AN ITEM, USE <UP/DOWN ARROW>'
DB ' AND PRESS <ENTER>.'
DB 10,13, 'PRESS <ESC> TO EXIT.'
.386
.CODE
A10MAIN PROC FAR
MOV AX, @DATA
MOV DS, AX
MOV ES, AX
CALL Q10CLEAR
MOV ROW, BOTROW+4
A20:
CALL B10MENU
MOV ROW, TOPROW+1
MOV ATTRIB, 16H
CALL D10DISPLY
CALL C10INPUT
CMP AL, 1BH
JNE A20
MOV AX, 0600H
CALL Q10CLEAR
MOV AX, 4C00H
INT 21H
A10MAIN ENDP
B10MENU PROC NEAR
PUSHA
MOV AX, 1301H
MOV BX, 0060H
LEA BP, SHADOW
MOV CX, 19
MOV DH, TOPROW+1
MOV DL, LEFCOL+1
B20: INT 10H
INC DH
CMP DH, BOTROW+2
JNE B20
MOV ATTRIB, 71H
MOV AX, 1300H
MOVZX BX, ATTRIB
LEA BP, MENU
MOV CX, 19
MOV DH, TOPROW
MOV DL, LEFCOL
B30: INT 10H
ADD BP, 19
INC DH
CMP DH, BOTROW+1
JNE B30
MOV AX, 1301H
MOVZX BX, ATTRIB
LEA BP, PROMPT
MOV CX, 79
MOV DH, BOTROW+4
MOV DL, 00
INT 10H
POPA
RET
B10MENU ENDP
C10INPUT PROC NEAR
PUSHA
C20: MOV AH, 10H
INT 16H
CMP AH, 50H
JE C30
CMP AH, 48H
JE C40
CMP AL, 0DH
JE C90
CMP AL, 1BH
JE C90
JMP C20
C30: MOV ATTRIB, 71H
CALL D10DISPLY
INC ROW
CMP ROW, BOTROW-1
JBE C50
MOV ROW, TOPROW+1
JMP C50
C40: MOV ATTRIB, 71H
CALL D10DISPLY
DEC ROW
CMP ROW, TOPROW+1
JAE C50
MOV ROW, BOTROW-1
C50: MOV ATTRIB, 17H
CALL D10DISPLY
JMP C20
C90: POPA
RET
C10INPUT ENDP
D10DISPLY PROC NEAR
PUSHA
MOVZX AX, ROW
SUB AX, TOPROW
IMUL AX, 19
LEA SI, MENU+1
ADD SI, AX
MOV AX, 1300H
MOVZX BX, ATTRIB
MOV BP, SI
MOV CX, 17
MOV DH, ROW
MOV DL, LEFCOL+1
INT 10H
POPA
RET
D10DISPLY ENDP
Q10CLEAR PROC NEAR
PUSHA
MOV AX, 0600H
MOV BH, 61H
MOV CX, 0000
MOV DX, 184FH
INT 10H
POPA
RET
Q10CLEAR ENDP
END A10MAIN
我目前必须在dosbox(TASM)中创建一个带阴影的菜单作为项目,这是我们教授给出的实际代码。尝试调整不同的行值但仍然收到失真的菜单。有几行似乎包含错误的值: