📄 1a.asm
字号:
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 AAAT
AAAS:
INC SI
MOV BL,BUF[SI]
CMP BL,0DH
JE GGG
CMP BL,'0'
JB FAR PTR WRONG2
CMP BL,'9'
JBE AAAS
CMP BL,'A'
JB FAR PTR WRONG2
CMP BL,'F'
JBE AAAS
JMP FAR PTR WRONG2
;====================
;====================
;将乘数转化为真正得十六进制
GGG:
MOV SI,2
MOV CL,4
MOV BL,BUF[SI]
CMP BL,0DH
JNE SDFQ
AAAT:
ENTER
LEA DX,ALPH1
MOV AH,9H
INT 21H
JMP FAR PTR ERR5
SDFQ:
CMP BL,39H
JA TA2
SUB BL,30H
TTW2:
INC SI
CMP BUF[SI],0DH
JE TN2
ROL BL,CL
TER2:
MOV AL,BUF[SI]
CMP AL,39H
JA QQ2
SUB AL,30H
DQQ2:
OR BX,AX
INC SI
CMP BUF[SI],0DH
JE TN2
JMP TN12
TA2:
SUB BL,37H
JMP TTW2
QQ2:
SUB AL,37H
JMP DQQ2
TN12:
ROL BX,CL
JMP TER2
;=========================
WRONG2:
WRONG1 ERR5
;=================
;重复输入时清除缓冲区得数
AAA22:
ENTER
MOV AL,0CH ;清除键盘缓冲区
INT 21H
JMP FAR PTR CON2;继续则跳到开始
;===================
TN2:
MOV BUF[SI],'$'
;=======================检测乘数
MOV SI,2
MOV DL,BUF1[SI] ;错误检测
DEC SI
CMP DL,0DH
JE HVV
TTHH:
INC SI
MOV DL,BUF1[SI]
CMP DL,0DH
JE HVVE
CMP DL,'0'
JB WRONG2
CMP DL,'9'
JBE TTHH
CMP DL,'A'
JB WRONG2
CMP DL,'F'
JBE TTHH
JMP WRONG2
;===================
HVVE:
MOV SI,2
MOV CL,4
MOV DL,BUF1[SI]
CMP DL,0DH
JNE SDFR
HVV:
ENTER
LEA DX,ALPH1
MOV AH,9H
INT 21H
JMP FAR PTR ERR5
SDFR:
CMP DL,39H
JA TTT2
SUB DL,30H
TTTT2:
INC SI
CMP BUF1[SI],0DH
JE II2
ROL DL,CL
IO2:
MOV AL,BUF1[SI]
CMP AL,39H
JA QQ12
SUB AL,30H
DQQ12:
OR DL,AL
INC SI
CMP BUF1[SI],0DH
JE II2
JMP IV2
TTT2:
SUB DL,37H
JMP TTTT2
QQ12:
SUB AL,37H
JMP DQQ12
IV2:
ROL DX,CL
JMP IO2
;============
II2:
MOV BUF1[SI],'$'
MOV CL,4
MOV SI,0
XOR AX,AX
MOV AX,BX
MUL DX ;相乘
JMP TT2
;===============
AAA12:
JMP FAR PTR AAA22 ;跳转
;===============
TT2:
ROL DX,CL
MOV X,DX
AND DX,0FH
CMP DX,9H
JA DSS2
ADD DX,30H
JMP FF2
DSS2:
ADD DX,37H
FF2:
MOV BUF0A[SI],DL
MOV DX,X
INC SI
CMP SI,4H
JE TT2A
JMP TT2
TT2A:
ROL AX,CL
MOV X,AX
AND AX,0FH
CMP AX,9H
JA DSSA2
ADD AX,30H
JMP FFA2
;================跳转
AAA42:
JMP FAR PTR AAA12
;=================
DSSA2:
ADD AX,37H
FFA2:
MOV BUF0A[SI],AL
MOV AX,X
INC SI
CMP SI,8H
JE EXIT2
JMP TT2A
EXIT2:
MOV BUF0A[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,BUF0A
MOV AH,9H
INT 21H
ERR5:
ENTER
LEA DX,ALPH ;========判断是否继续
MOV AH,9H
INT 21H
ENTER
MOV AH,1H
INT 21H
CMP AL,'Y'
JE FAR PTR AAA42
CMP AL,'y'
JE FAR PTR AAA42
RET
MULTI ENDP
;======================除法运算
DIVIS PROC FAR
CON4:
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 ;输入被除数
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 HHDIV
TTVCC:
INC SI
MOV BL,BUF[SI]
CMP BL,0DH
JE HDIV
CMP BL,'0'
JB WRONGC
CMP BL,'9'
JBE TTVCC
CMP BL,'A'
JB WRONGC
CMP BL,'F'
JBE TTVCC
JMP WRONGC
;====================
HDIV:
MOV SI,2
MOV CL,4
MOV BL,BUF[SI]
CMP BL,0DH
JNE SDFW
HHDIV:
ENTER
LEA DX,ALPH1
MOV AH,9H
INT 21H
JMP FAR PTR ERR6
SDFW:
CMP BL,39H
JA TA4
SUB BL,30H
TTW4:
INC SI
CMP BUF[SI],0DH
JE TN4
ROL BL,CL
TER4:
MOV AL,BUF[SI]
CMP AL,39H
JA QQ4
SUB AL,30H
DQQ4:
OR BX,AX
INC SI
CMP BUF[SI],0DH
JE TN4
JMP TN14
TA4:
SUB BL,37H
JMP TTW4
QQ4:
SUB AL,37H
JMP DQQ4
TN14:
ROL BX,CL
JMP TER4
;===========
WRONGC:
WRONG1 ERR6
;========
AAA24:
ENTER
MOV AL,0CH ;清除键盘缓冲区
INT 21H
JMP FAR PTR CON4 ;================
;=========================
TN4:
MOV BUF[SI],'$'
;============================检测除数
MOV SI,2
MOV DL,BUF1[SI] ;错误检测
DEC SI
CMP DL,0DH
JE VCVC
TTVC:
INC SI
MOV DL,BUF1[SI]
CMP DL,0DH
JE VXX
CMP DL,'0'
JB WRONGC
CMP DL,'9'
JBE TTVC
CMP DL,'A'
JB WRONGC
CMP DL,'F'
JBE TTVC
JMP WRONGC
;====================
VXX:
MOV SI,2
MOV CL,4
MOV DL,BUF1[SI]
CMP DL,0DH
JNE SDFS
VCVC:
ENTER
LEA DX,ALPH1
MOV AH,9H
INT 21H
JMP FAR PTR ERR6
SDFS:
CMP DL,39H
JA TTT4
SUB DL,30H
TTTT4:
INC SI
CMP BUF1[SI],0DH
JE II4
ROL DL,CL
IO4:
MOV AL,BUF1[SI]
CMP AL,39H
JA QQ14
SUB AL,30H
DQQ14:
OR DL,AL
INC SI
CMP BUF1[SI],0DH
JE II4
JMP IV4
TTT4:
SUB DL,37H
JMP TTTT4
QQ14:
SUB AL,37H
JMP DQQ14
IV4:
ROL DX,CL
JMP IO4
;============
II4:
MOV BUF1[SI],'$'
MOV CL,4
MOV SI,0
XOR AX,AX
MOV AX,BX
MOV BX,DX
XOR DX,DX
DIV BX ;++++++++++++++++++++++
JMP TT4
AAA14:
JMP FAR PTR AAA24 ;==================
;===============
TT4:
ROL AX,CL
MOV X,AX
AND AX,0FH
CMP AX,9H
JA DSS4
ADD AX,30H
JMP FF4
DSS4:
ADD AX,37H
FF4:
MOV BUF0A[SI],AL
MOV AX,X
INC SI
CMP SI,4H
JE TT24
JMP TT4
TT24:
CMP DX,0H
JE EXIT4
MOV BUF0A[SI],2DH
INC SI
TT34:
ROL DX,CL
MOV X,DX
AND DX,0FH
CMP DX,9H
JA DSSA4
ADD DX,30H
JMP FFA4
;================CHARU
AAA44:
JMP FAR PTR AAA14
;=================
DSSA4:
ADD DX,37H
FFA4:
MOV BUF0A[SI],DL
MOV DX,X
INC SI
CMP SI,9H
JE EXIT4
JMP TT34
EXIT4:
MOV BUF0A[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,BUF0A
MOV AH,9H
INT 21H
ERR6:
ENTER
LEA DX,ALPH ;========判断是否继续
MOV AH,9H
INT 21H
ENTER
MOV AH,1H
INT 21H
CMP AL,'Y'
JE FAR PTR AAA44
CMP AL,'y'
JE FAR PTR AAA44
RET
DIVIS ENDP
;===================主界面选择区
START:
MOV AX,DATA
MOV DS,AX
STAR:
CLSA
OUTPUT BUF00
ENTER
OUTPUT BUF01
ENTER
OUTPUT BUF02
ENTER
OUTPUT BUF03
ENTER
OUTPUT BUF04
ENTER
OUTPUT BUF05
ENTER
OUTPUT BUF06
ENTER
OUTPUT BUF07
ENTER
OUTPUT BUF08
ENTER
OUTPUT BUF09
ENTER
OUTPUT BUF10
ENTER
MOV AH,1H
INT 21H
CMP AL,'1'
JNE ATOB
CALL ADDNUM
CLSA
JMP STAR
ATOB:
CMP AL,'2'
JNE BTOC
CALL JIAN
CLSA
JMP STAR
BTOC:
CMP AL,'3'
JNE CTOD
CALL MULTI
CLSA
JMP STAR
CTOD:
CMP AL,'4'
JNE DTOE
CALL DIVIS
CLSA
JMP STAR
DTOE:
CMP AL,'5'
JE EXIT1
JMP STAR
EXIT1:
MOV AH,4CH
INT 21H
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -