C4: MOV CX,1D
CALL DEC_DIV
RET
CHANGE ENDP
;-------------------------------
BEGIN PROC NEAR
BACK: CLEAR 1EH
CURS 2,20 ;设置光标为(2.20)
DISPMSG MSG0 ;显示用户界面
CURS 8,41 ;设置光标为(8,41) ,第一行
MOV BX,0
MOV CX,2
NEWCHAR1:
MOV AH,1 ;键盘输入并回显
INT 21H ;DOS调用
CMP AL,30H ;检查输入的字符是不是数字
JAE J1 ;如果不是,则转移至J1
JMP D2 ;是,转移到D2执行
J1: CMP AL,39H ; 与9的ASCII侣氡
JBE J2 ;如果输入的字符是0-9,则转移至J2
JMP D2 ;如果不是数字,则转移至D2
J2: SUB AL,30H
CBW ;AL的内容符号扩展到AH
XCHG AX,BX
MOV DI,10
MUL DI
XCHG AX,BX
ADD BX,AX
LOOP NEWCHAR1
MOV NUM1,BX
CURS 11,41 ;设置光标位为(11,40),第二行
MOV BX,0
MOV CX,2
NEWCHAR2:
MOV AH,1 ;键盘输入并回显
INT 21H ;DOS调用
CMP AL,30H ;与0的ASCII码比较
JAE J3 ;如果输入数字大于等于0则跳转至J3
JMP D2
J3: CMP AL,39H ;与9比较
JBE J4 ;如果小于或等于9则跳转
JMP D2 ;如果输入不是数字则跳转
J4: SUB AL,30H ;如果输入不是0-9,则转化成相应的字符
CBW ;将AL符号扩展到AH
XCHG AX,BX
MOV DI,10
MUL DI
XCHG AX,BX
ADD BX,AX
LOOP NEWCHAR2
MOV NUM2,BX
MOV AX,NUM1
MOV BX,NUM2
PUSH AX
PUSH BX
CURS 15,33 ;设置光标的位置为(15.33),第三行
DISPMSG MSG1 ;显示提示信息
MOV AH,1 ;接受键盘输入并回显
INT 21H ;DOS调用
CMP AL,'+'
JE ADDI ;如果运算符为+,则计算两数之和
CMP AL,'-'
JE SUBT ;如果运算符为-,则计算两数之差
CMP AL,'*'
JE MULT ;如果运算符为*,则计算两数之积
CMP AL,'/'
JE DIVI ;如果运算符为/,则计算两数之商
CURS 16,25 ;设置光标为(16,25)
DISPMSG MSG2 ;在屏幕上输出提示信息
JMP D1
;----------------------------------------
;ADD THE TWO DATAS
ADDI: POP BX
POP AX
ADD AX,BX ;计算两数字之和
PUSH AX
CURS 14,41 ;设置光标位置为(14,41)
POP AX
CALL CHANGE ;将结果转换为十进制数
JMP D1
;---------------------------------------
;SUBTRACT THE TWO DATAS
SUBT: POP BX
POP AX
CMP AX,BX ;比较两数大小
JAE D0 ;如果AX>=BX则跳转
XCHG AX,BX
PUSH AX
PUSH BX
CURS 14,40 ;设置光标位置为(14,40)
DISPMSG MSG5 ;在屏幕上显示负号
POP BX
POP AX
D0: SUB AX,BX ;计算两数之差
PUSH AX
CURS 14,41 ;设置光标位置为(14,41)
POP AX
CALL CHANGE ;将结果转换为十进制数
JMP D1
;---------------------------------------
;MULTIPLY THE TWO DATAS
MULT: POP BX
POP AX
MUL BX ;计算两数之积
PUSH AX
CURS 14,41 ;设置光标位置为(14,41)
POP AX
CALL CHANGE ;将结果转换为十进制数
JMP D1
;---------------------------------------
;DIVIDE THE TWO DATAS
DIVI: POP BX
POP AX
CMP BX,0 ;判断除数是否为0
JE ERROR ;如果是0则跳转
CWD
DIV BX ;计算两数之商
PUSH DX
PUSH AX
CURS 14,41 ;设置光标位置为(14,41)
POP AX
CALL CHANGE ;将十六进制数转换为十进制数
POP DX
CMP DX,0
JNE LOP ;如果DX不等于0则跳转
JMP D1