这段代码哪里有问题,求指教
TITLE A10SELMU (EXE)
.386
.MODEL SMALL
.STACK 128
; ------------------------------------------
.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 recors ', 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 13, 10, 'Press <Esc> to exit.'
; ---------------------------------------------------------
.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 ; 按下Escape键
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 ; 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 ; 请求显示菜单
MOV BL, ATTRIB ; 页和属性
MOV BH, 0
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 ; 请求显示字符
MOV BL, ATTRIB ; 页和属性
MOV BH, 0
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 ; Escape键?
JE C90
JMP C20 ; 都不是重新输入
C30: MOV ATTRIB, 71H ; 白底蓝字
CALL D10DISPLY ; 设置原来的行为正常显示
INC ROW ; 加1到下一行
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 ; 保存通用寄存器
MOV AL, ROW ; Row通知哪行要设置
MOV AH, 0
SUB AX, TOPROW
IMUL AX, 19 ; 乘以行的长度
LEA SI, MENU+1 ; 选择的菜单行
ADD SI, AX
MOV AX, 1300H ; 请求显示
MOV BL, ATTRIB ; 页和属性
MOV BH, 0
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, 0000H ; 全屏
MOV DX, 184FH ;
INT 10H
POPA
RET
Q10CLEAR ENDP
END A10MAIN这段代码是从《IBM PC 汇编语言程序设计》第十章的例题,对照着抄下来的,用masm6.15编译可以通过,但是执行的时候会出现有非法指令这样的提示,无法执行
...全文
相关推荐
不懂的工程代码,求指教
哪位大大哥大大姐来帮我搞定问题呀!!这个工程是一个网上书店,被我改了一点!可是现在运行不了了!!来个人帮我看看吧!!
C语言矩阵求逆(源代码)
C语言中这样求其逆矩阵,矩阵求逆的源代码。非常实用。
矩阵的求逆运算代码
众所周知,c语言的数学计算功能很差,尤其是对矩阵运算。上传的代码能进行矩阵的求逆,可以修改后直接嵌入程序中。该代码已经在化工、机械等多个实际的工业过程控制中得到应用,主要是求解一些复杂的控制算法,运算效率很高,完全满足实际的控制过程。
vb求阶乘之和 源代码
vb 求阶乘之和 源代码vb 求阶乘之和 源代码
VB代码矩阵求逆
可以实现矩阵的求逆运算 。在测量平差中经常使用


