📄 1a.asm
字号:
OUTPUT MACRO SDF
LEA DX,SDF
MOV AH,9H
INT 21H
CLS
ENDM
ENTER MACRO
MOV DL,0DH
MOV AH,2H
INT 21H
MOV DL,0AH
MOV AH,2H
INT 21H
ENDM
CLS MACRO
XOR AX,AX
XOR BX,BX
XOR CX,CX
XOR DX,DX
ENDM
ENTER MACRO
MOV DL,0DH
MOV AH,2H
INT 21H
MOV DL,0AH
MOV AH,2H
INT 21H
ENDM
CLSA MACRO ;===============清屏函数
MOV AH,0FH
INT 10H
MOV AH,0
INT 10H
ENDM
WRONG1 MACRO CUO
ENTER
LEA DX,WROMES
MOV AH,9H
INT 21H
JMP FAR PTR CUO
ENDM
DATA SEGMENT
BUF00 DB " *************************************************$"
BUF01 DB " || THIS IS A CALCULATRICE ||$"
BUF02 DB " || ^_^ ^_^ ||$"
BUF03 DB " *************************************************$"
BUF04 DB "THIS IS A CALCULATRICE,YOU CAN USE IT DO THE CALCULER!!$"
BUF05 DB "1:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>ADDITION<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:1$"
BUF06 DB "2:>>>>>>>>>>>>>>>>>>>>>>>>>>>SOUSTRACTION<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:2$"
BUF07 DB "3:>>>>>>>>>>>>>>>>>>>>>>>>>>MULTIPLICATION<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:3$"
BUF08 DB "4:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>DIVISION<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:4$"
BUF09 DB "5:>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>CLS<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<:5$"
BUF10 DB "PLEASE INPUT YOU CHOUSE!!!$"
ALPH DB "CONTINU OR NOT,YES PRESS Y/NO PRESS ANY KEYS$"
ALPH1 DB "WRONG,THE TWO NUMBER MUST BE ALL HAVE!!$"
WROMES DB "YOU HAVE INPUT A WRONG NUMBER!!NOT BETWEEN(0-9 | A-F)$"
ALPH2 DB "PLEASE INPUT TWO NUMBER:$"
BUF2 DB "1) $"
BUF3 DB " 2) $"
BUF DB 5,?,5 DUP(?)
BUF1 DB 5,?,5 DUP(0)
BUF0 DB 5 DUP (?)
BUF0A DB 9 DUP (?)
X DW ?
DATA ENDS ;====================数据段结束
SSS SEGMENT STACK
DB 100 DUP(0)
SSS ENDS
CODE SEGMENT ;===================代码段开始
ASSUME CS:CODE,DS:DATA
STARTT:
MOV AX,DATA
MOV DS,AX
;==================
ADDNUM PROC FAR
CON0:
CLS
CLSA
ENTER
MOV SI,0
MOV DI,0
LEA DX,ALPH2
MOV AH,9H
INT 21H
ENTER
XOR DX,DX
MOV AL,0CH ;清除键盘缓冲区
INT 21H
;=================
OUTPUT BUF2
LEA DX,BUF ;输入被加数
MOV AH,0AH
INT 21H
ENTER
;------------
OUTPUT BUF3
LEA DX,BUF1 ;输入加数
MOV AH,0AH
INT 21H
CLS
;=====================
MOV SI,2
MOV BL,BUF[SI] ;错误检测
DEC SI
CMP BL,0DH
JE HIIV
TTQ1:
INC SI
MOV BL,BUF[SI]
CMP BL,0DH
JE HII
CMP BL,'0'
JB WRONG
CMP BL,'9'
JBE TTQ1
CMP BL,'A'
JB WRONG
CMP BL,'F'
JBE TTQ1
JMP WRONG
;====================
HII:
MOV CL,4
MOV SI,2
MOV BL,BUF[SI]
CMP BL,0DH ;如果不存在就输出出错信息
JNE JIXU
ENTER
HIIV:
ENTER
LEA DX,ALPH1
MOV AH,9H
INT 21H
JMP FAR PTR ERR
;=========================
JIXU:
CMP BL,39H
JA TA0A
SUB BL,30H
TTW0:
INC SI
CMP BUF[SI],0DH
JE TN0
ROL BL,CL
TER0:
MOV AL,BUF[SI]
CMP AL,39H
JA QQ0
SUB AL,30H
DQQ0:
OR BX,AX
INC SI
CMP BUF[SI],0DH
JE TN0
JMP TN10
TA0A:
SUB BL,37H
JMP TTW0
QQ0:
SUB AL,37H
JMP DQQ0
TN10:
ROL BX,CL
JMP TER0
;========显示出错信息
WRONG:
WRONG1 ERR
;========
AAA20:
ENTER
MOV AL,0CH ;清除键盘缓冲区
INT 21H
JMP FAR PTR CON0 ;================
;=========================
TN0:
MOV BUF[SI],'$'
;========================检测加数
MOV SI,2
MOV DL,BUF1[SI] ;错误检测
DEC SI
CMP DL,0DH
JE HIIVV
TTQ1A:
INC SI
MOV DL,BUF1[SI]
CMP DL,0DH
JE HIIVG
CMP DL,'0'
JB WRONG
CMP DL,'9'
JBE TTQ1A
CMP DL,'A'
JB WRONG
CMP DL,'F'
JBE TTQ1A
JMP WRONG
;====================
HIIVG:
MOV SI,2
MOV CL,4
MOV DL,BUF1[SI]
CMP DL,0DH ;检测字符是否存在否则输出错误信息
JNE SDFD
HIIVV:
ENTER
LEA DX,ALPH1
MOV AH,9H
INT 21H
JMP FAR PTR ERR
SDFD:
CMP DL,39H
JA TTT0
SUB DL,30H
TTTT0:
INC SI
CMP BUF1[SI],0DH
JE II0
ROL DL,CL
IO0:
MOV AL,BUF1[SI]
CMP AL,39H
JA QQ10
SUB AL,30H
DQQ10:
OR DL,AL
INC SI
CMP BUF1[SI],0DH
JE II0
JMP IV0
TTT0:
SUB DL,37H
JMP TTTT0
QQ10:
SUB AL,37H
JMP DQQ10
IV0:
ROL DX,CL
JMP IO0
;============
II0:
MOV BUF1[SI],'$'
MOV CL,4
MOV SI,0
ADD BX,DX
JC DC0
MOV BUF0[SI],30H
INC SI
JMP TT0
;===============
DC0:
MOV DL,31H
MOV BUF0[SI],DL
INC SI
TT0:
ROL BX,CL
MOV AX,BX
AND BX,0FH
CMP BX,9H
JA DSS0
ADD BX,30H
JMP FF0
;=============================
AAA10:
JMP FAR PTR AAA20 ;==================
;===========================
DSS0:
ADD BX,37H
FF0:
MOV BUF0[SI],BL
MOV BX,AX
INC SI
CMP SI,5H
JE EXIT0
JMP TT0
EXIT0:
MOV BUF0[SI],'$'
ENTER
LEA DX,BUF+2
MOV AH,9H
INT 21H
MOV DL,'+'
MOV AH,2H
INT 21H
LEA DX,BUF1+2
MOV AH,9H
INT 21H
MOV DL,'='
MOV AH,2H
INT 21H
LEA DX,BUF0
MOV AH,9H
INT 21H
ERR:
ENTER
LEA DX,ALPH ;========判断是否继续
MOV AH,9H
INT 21H
ENTER
MOV AH,1H
INT 21H
CMP AL,'Y'
JE FAR PTR AAA10
CMP AL,'y'
JE FAR PTR AAA10
RET
ADDNUM ENDP
JIAN PROC FAR ;-----减法运算
CON:
CLSA
CLS
ENTER
MOV SI,0
MOV DI,0
LEA DX,ALPH2
MOV AH,9H
INT 21H
ENTER
XOR DX,DX
MOV AL,0CH ;清除键盘缓冲区
INT 21H
;=================
OUTPUT BUF2
LEA DX,BUF ;输入被减数
MOV AH,0AH
INT 21H
ENTER
;------------
OUTPUT BUF3
LEA DX,BUF1 ;输入减数
MOV AH,0AH
INT 21H
CLS
;=====================
MOV SI,2
MOV BL,BUF[SI] ;错误检测
DEC SI
CMP BL,0DH
JE HIIE
HUI:
INC SI
MOV BL,BUF[SI]
CMP BL,0DH
JE HIIT
CMP BL,'0'
JB WRONGA
CMP BL,'9'
JBE HUI
CMP BL,'A'
JB WRONGA
CMP BL,'F'
JBE HUI
JMP WRONGA
;====================
HIIT:
MOV SI,2
MOV CL,4
MOV BL,BUF[SI]
CMP BL,0DH
JNE SDF1
HIIE:
ENTER
LEA DX,ALPH1
MOV AH,9H
INT 21H
JMP FAR PTR ERR2
SDF1:
CMP BL,39H
JA TA
SUB BL,30H
TTW:
INC SI
CMP BUF[SI],0DH
JE TN
ROL BL,CL
TER:
MOV AL,BUF[SI]
CMP AL,39H
JA QQ
SUB AL,30H
DQQ:
OR BX,AX
INC SI
CMP BUF[SI],0DH
JE TN
JMP TN1
TA:
SUB BL,37H
JMP TTW
QQ:
SUB AL,37H
JMP DQQ
TN1:
ROL BX,CL
JMP TER
;====================
WRONGA:
WRONG1 ERR2
;=================
AAA2:
ENTER
MOV AL,0CH ;清除键盘缓冲区
INT 21H
JMP FAR PTR CON ;继续开始减法运算
;=========================
TN:
MOV BUF[SI],'$'
;========================检测减数
MOV SI,2
MOV DL,BUF1[SI] ;错误检测
DEC SI
CMP DL,0DH
JE SUBL
TTQ1AA:
INC SI
MOV DL,BUF1[SI]
CMP DL,0DH
JE HIIVP
CMP DL,'0'
JB WRONGA
CMP DL,'9'
JBE TTQ1AA
CMP DL,'A'
JB FAR PTR WRONGA
CMP DL,'F'
JBE TTQ1AA
JMP FAR PTR WRONGA
;====================
HIIVP:
MOV SI,2
MOV CL,4
MOV DL,BUF1[SI]
CMP DL,39H
JA TTT
SUB DL,30H
TTTT:
INC SI
CMP BUF1[SI],0DH
JE II
ROL DL,CL
IO:
MOV AL,BUF1[SI]
CMP AL,0DH
JNE SDF2
SUBL:
ENTER
LEA DX,ALPH1
MOV AH,9H
INT 21H
JMP FAR PTR ERR2
SDF2:
CMP AL,39H
JA QQ1
SUB AL,30H
DQQ1:
OR DL,AL
INC SI
CMP BUF1[SI],0DH
JE II
JMP IV
TTT:
SUB DL,37H
JMP TTTT
QQ1:
SUB AL,37H
JMP DQQ1
IV:
ROL DX,CL
JMP IO
;============
II:
MOV BUF1[SI],'$'
MOV CL,4
MOV SI,0
SUB BX,DX
JC FAR PTR DC
MOV BUF0[SI],30H
INC SI
JMP TT
;===============
DC:
MOV DL,46H
MOV BUF0[SI],DL
INC SI
TT:
ROL BX,CL
MOV AX,BX
AND BX,0FH
CMP BX,9H
JA DSS
ADD BX,30H
JMP FF
;=========================
AAA1:
JMP FAR PTR AAA2 ;=================
DSS:
ADD BX,37H
FF:
MOV BUF0[SI],BL
MOV BX,AX
INC SI
CMP SI,5H
JE EXIT
JMP TT
EXIT:
MOV BUF0[SI],'$'
ENTER
LEA DX,BUF+2
MOV AH,9H
INT 21H
MOV DL,'-'
MOV AH,2H
INT 21H
LEA DX,BUF1+2
MOV AH,9H
INT 21H
MOV DL,'='
MOV AH,2H
INT 21H
LEA DX,BUF0
MOV AH,9H
INT 21H
ERR2:
ENTER
LEA DX,ALPH ;========判断是否继续
MOV AH,9H
INT 21H
ENTER
MOV AH,1H
INT 21H
CMP AL,'Y'
JE FAR PTR AAA1
CMP AL,'y'
JE FAR PTR AAA1
RET
JIAN ENDP
;======================乘法运算
MULTI PROC FAR
CON2:
CLSA
ENTER
CLS
MOV SI,0
MOV DI,0
LEA DX,ALPH2 ;输出提示信息
MOV AH,9H
INT 21H
ENTER
XOR DX,DX
MOV AL,0CH ;清除键盘缓冲区
INT 21H
;=================
OUTPUT BUF2
LEA DX,BUF ;输入被乘数
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -