📄 test1.asm
字号:
DATA SEGMENT
NUM1 DB 50 DUP(?)
NUM2 DB 50 DUP(?)
ANS1 DB 51 DUP(0)
ANS2 DB 100 DUP(0)
BUF DB 0AH,0DH,'Error!',0AH,0DH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
MOV DS,AX
;-------------------------- PANDUAN ZHENG/FU
L11: MOV SI,0
ADD SI,49
MOV CX,0
MOV AH,01H
INT 21H
CMP AL,'-'
JZ FU2
JMP INNUM
;--------------------------- XUAN+,-,*
INPT: MOV AH,01H
INT 21H
CMP AL,'+'
JNZ SUBL
CALL ADDR
JMP OUTR
SUBL: CMP AL,'-'
JNZ MULL
CALL SUBR
JMP OUTR
MULL: CMP AL,'*'
JNZ INNUM
CALL MULR
JMP OUTR
;-------------------------------- SHURUNUM1
INNUM: SUB AL,30H
CMP AL,09H
JA ERROR1
CMP AL,00H
JL ERROR1
MOV NUM1[SI],AL
DEC SI
INC CX
JMP INPT
;------------------------------ JIAFAZICHENGXU
ADDR PROC NEAR
CALL GD1
SUU: CLC
MOV SI,OFFSET NUM1
MOV DI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
ADD1: MOV AL,[SI]
ADC AL,[DI]
AAA
MOV [BX],AL
INC DI
INC SI
INC BX
DEC CX
JNZ ADD1
MOV AL,0
ADC AL,0
AAA
MOV [BX],AL
RET
ADDR ENDP
FU2: JMP FU
ERROR1: JMP ERROR
;--------------------------- JIANFAZICHENGXU
SUBR PROC NEAR
CALL GD2
MOV SI,50
COMP: DEC SI
MOV AL,NUM1[SI]
CMP AL,NUM2[SI]
JB SUB2
JZ COMP
SUB1: CLC
MOV SI,OFFSET NUM1
MOV DI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
SUBB: MOV AL,[SI]
SBB AL,[DI]
AAS
MOV [BX],AL
INC SI
INC DI
INC BX
DEC CX
JNZ SUBB
DEC BX
JMP OUTR
SUB2: CLC
MOV DI,OFFSET NUM1
MOV SI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
MOV DL,'-'
MOV AH,02H
INT 21H
JMP SUBB
RET
SUBR ENDP
;----------------------------------CHENG
MULR PROC NEAR
CALL GD3
MOV DI,0
MOV DX,50
MULR_2: MOV SI,0
MOV CX,51
MULR_3:MOV ANS1[SI],0
INC SI
DEC CX
JNZ MULR_3
MOV SI,0
MOV CX,50
CLC
MULR_1: MOV AL,NUM1[SI]
MUL NUM2[DI]
AAM
ADC AL,ANS1[SI]
AAA
MOV ANS1[SI],AL
MOV ANS1[SI+1],AH
INC SI
DEC CX
JNZ MULR_1
MOV SI,0
MOV CX,51
CLC
MULR_4: MOV AL,ANS1[SI]
ADC AL,ANS2[DI]
AAA
MOV ANS2[DI],AL
INC SI
INC DI
DEC CX
JNZ MULR_4
SUB DI,51
INC DI
DEC DX
CMP DX,0
JNZ MULR_2
MOV SI,0
MOV CX,51
MULR_31: MOV ANS1[SI],0
INC SI
DEC CX
JNZ MULR_31
RET
MULR ENDP
ERROR12: JMP ERROR9
;---------------------------SHURUDIERSHU JIA
GD1 PROC NEAR
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GD1_1: MOV AL,NUM1[SI]
XCHG AL,NUM1[DI]
MOV NUM1[SI],AL
INC SI
INC DI
DEC CX
JNZ GD1_1
MOV SI,0
ADD SI,49
AINPTNUM2: MOV AH,01H
INT 21H
CMP AL,'-'
JZ AINPTNUM2_2
CMP AL,0DH
JZ GD1_AQL
SUB AL,30H
CMP AL,09H
JA ERROR12
CMP AL,00H
JL ERROR12
MOV NUM2[SI],AL
DEC SI
INC CX
JMP AINPTNUM2
AINPTNUM2_2: MOV AH,01H
INT 21H
CMP AL,0DH
JZ GD1_AQL2
SUB AL,30H
CMP AL,09H
JA ERROR12
CMP AL,00H
JL ERROR12
MOV NUM2[SI],AL
DEC SI
INC CX
JMP AINPTNUM2_2
GD1_AQL: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GD1_2: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GD1_2
JMP RR1
GD1_AQL2: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GD1_22: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GD1_22
MOV SI,50
COMPA: DEC SI
MOV AL,NUM1[SI]
CMP AL,NUM2[SI]
JB SUB2A
JZ COMPA
SUB1A: CLC
MOV SI,OFFSET NUM1
MOV DI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
SUBBA: MOV AL,[SI]
SBB AL,[DI]
AAS
MOV [BX],AL
INC SI
INC DI
INC BX
DEC CX
JNZ SUBBA
DEC BX
JMP OUTR
SUB2A: CLC
MOV DI,OFFSET NUM1
MOV SI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
MOV DL,'-'
MOV AH,02H
INT 21H
JMP SUBBA
JMP OUTR
RR1: RET
GD1 ENDP
ERROR9: JMP ERROR10
BBS: JMP AINPTNUM2
;-----------------------------------DIAOYONG
ERROR10: JMP ERROR
ABS: JMP BBS
;----------------------------------JIAN
GD2 PROC NEAR
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GD2_1: MOV AL,NUM1[SI]
XCHG AL,NUM1[DI]
MOV NUM1[SI],AL
INC SI
INC DI
DEC CX
JNZ GD2_1
MOV SI,0
ADD SI,49
FINPTNUM2: MOV AH,01H
INT 21H
CMP AL,'-'
JZ FINPTNUM22
CMP AL,0DH
JZ GD2_AQL
SUB AL,30H
CMP AL,09H
JA ERROR10
CMP AL,00H
JL ERROR10
MOV NUM2[SI],AL
DEC SI
INC CX
JMP FINPTNUM2
FINPTNUM22: MOV AH,01H
INT 21H
CMP AL,0DH
JZ GD2_AQL2
SUB AL,30H
CMP AL,09H
JA ERROR10
CMP AL,00H
JL ERROR10
MOV NUM2[SI],AL
DEC SI
INC CX
JMP FINPTNUM22
GD2_AQL: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GD2_2: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GD2_2
JMP RR2
GD2_AQL2: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GD2_22: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GD2_22
JMP SUU
RR2: RET
GD2 ENDP
;-------------------------------------CHENG
GD3 PROC NEAR
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GD3_1: MOV AL,NUM1[SI]
XCHG AL,NUM1[DI]
MOV NUM1[SI],AL
INC SI
INC DI
DEC CX
JNZ GD3_1
MOV SI,0
ADD SI,49
GINPTNUM2: MOV AH,01H
INT 21H
CMP AL,'-'
JZ MUL1
CMP AL,0DH
JZ GD3_AQL
SUB AL,30H
CMP AL,09H
JA ERROR
CMP AL,00H
JL ERROR
MOV NUM2[SI],AL
DEC SI
INC CX
JMP GINPTNUM2
GD3_AQL: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GD3_2: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GD3_2
RET
GD3 ENDP
MUL1: JMP MUL2
KJ7: JMP GINPTNUM2
;------------------------CHUCUO
ERROR: LEA DX,BUF
MOV AH,09H
INT 21H
JMP L11
OUTR: MOV SI,51
MOV CX,52
OUTP1_1: DEC SI
DEC CX
JZ OUTP2
MOV DL,ANS1[SI]
CMP DL,0
JZ OUTP1_1
OUTP1_2: ADD DL,30H
MOV AH,02H
INT 21H
DEC SI
DEC CX
MOV DL,ANS1[SI]
JNZ OUTP1_2
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,0DH
MOV AH,02H
INT 21H
OUTP2: MOV SI,100
MOV CX,101
OUTP2_1: DEC SI
DEC CX
JZ EXIT1
MOV DL,ANS2[SI]
CMP DL,0
JZ OUTP2_1
OUTP2_2: ADD DL,30H
MOV AH,02H
INT 21H
DEC SI
DEC CX
MOV DL,ANS2[SI]
JNZ OUTP2_2
EXIT: MOV AH,4CH
INT 21H
EXIT1: MOV DL,30H
MOV AH,02H
INT 21H
JMP EXIT
MUL2: JMP MUL3
KJ6: JMP KJ7
;------------------------------ FUSHUCHULI
ERROR2: JMP ERROR
FU: MOV AH,01H
INT 21H
CMP AL,'+'
JNZ SUBLF
CALL ADDF
JMP OUTR
SUBLF: CMP AL,'-'
JNZ MULLF
CALL SUBF
JMP OUTR
MULLF: CMP AL,'*'
JNZ INNUMF
CALL MULF
JMP OUTR
INNUMF: SUB AL,30H
CMP AL,09H
JA ERROR2
CMP AL,00H
JL ERROR2
MOV NUM1[SI],AL
DEC SI
INC CX
JMP FU
MUL3: JMP MUL4
KJ5: JMP KJ6
;----------------------------------FUHAOJIA
ADDF PROC NEAR
CALL GDF
CLC
MOV SI,OFFSET NUM1
MOV DI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
ADD1F: MOV AL,[SI]
ADC AL,[DI]
AAA
MOV [BX],AL
INC DI
INC SI
INC BX
DEC CX
JNZ ADD1F
MOV AL,0
ADC AL,0
AAA
MOV [BX],AL
RET
ADDF ENDP
;---------------------------------------FHAOSHURUDIERSHU JIA
GDF PROC NEAR
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GDF_1: MOV AL,NUM1[SI]
XCHG AL,NUM1[DI]
MOV NUM1[SI],AL
INC SI
INC DI
DEC CX
JNZ GDF_1
MOV SI,0
ADD SI,49
JMP INPTNUM2F
ERROR3: JMP ERROR
MUL4: JMP MUL5
KJ4: JMP KJ5
INPTNUM2F: MOV AH,01H
INT 21H
CMP AL,'-'
JZ INPTNUM2_2
CMP AL,0DH
JZ GDF_AQL2
SUB AL,30H
CMP AL,09H
JA ERROR3
CMP AL,00H
JL ERROR3
MOV NUM2[SI],AL
DEC SI
INC CX
JMP INPTNUM2F
INPTNUM2_2: MOV AH,01H
INT 21H
CMP AL,0DH
JZ GDF_AQL
SUB AL,30H
CMP AL,09H
JA ERROR3
CMP AL,00H
JL ERROR3
MOV NUM2[SI],AL
DEC SI
INC CX
JMP INPTNUM2_2
GDF_AQL: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV DL,'-'
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GDF_2: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GDF_2
MOV BL,0
MOV BL,2
JMP RRE
GDF_AQL2: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GDF2_2: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GDF2_2
MOV SI,50
COMPF: DEC SI
MOV AL,NUM1[SI]
CMP AL,NUM2[SI]
JB SUB2F
JZ COMPF
JMP SUB1F
ADD1FF: JMP ADD1F
SUB1F: MOV DL,'-'
MOV AH,02H
INT 21H
CLC
MOV SI,OFFSET NUM1
MOV DI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
SUBBF: MOV AL,[SI]
SBB AL,[DI]
AAS
MOV [BX],AL
INC SI
INC DI
INC BX
DEC CX
JNZ SUBBF
DEC BX
JMP OUTR
SUB2F: CLC
MOV DI,OFFSET NUM1
MOV SI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
JMP SUBBF
RRE: RET
GDF ENDP
MUL5: JMP MUL6
KJ3: JMP KJ4
;-------------------------------------------------FUHAOSUB
SUBF PROC NEAR
CALL GDF2
CLC
MOV SI,OFFSET NUM1
MOV DI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
SUB1F3: MOV AL,[SI]
ADC AL,[DI]
AAA
MOV [BX],AL
INC DI
INC SI
INC BX
DEC CX
JNZ ADD1FF
MOV AL,0
ADC AL,0
AAA
MOV [BX],AL
RET
SUBF ENDP
;-------------------------------------------------JIAN
GDF2 PROC NEAR
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GDF2_1: MOV AL,NUM1[SI]
XCHG AL,NUM1[DI]
MOV NUM1[SI],AL
INC SI
INC DI
DEC CX
JNZ GDF2_1
MOV SI,0
ADD SI,49
JMP INPTNUM22
ERROR4: JMP ERROR3
INPTNUM22: MOV AH,01H
INT 21H
CMP AL,'-'
JZ INPTNUM22_2
CMP AL,0DH
JZ GDF2_AQL
SUB AL,30H
CMP AL,09H
JA ERROR4
CMP AL,00H
JL ERROR4
MOV NUM2[SI],AL
DEC SI
INC CX
JMP INPTNUM22
INPTNUM22_2: MOV AH,01H
INT 21H
CMP AL,0DH
JZ GDF2_AQL2
SUB AL,30H
CMP AL,09H
JA ERROR4
CMP AL,00H
JL ERROR4
MOV NUM2[SI],AL
DEC SI
INC CX
JMP INPTNUM22_2
MUL6 : JMP MUL7
KJ2: JMP KJ3
SUB2FF: JMP SUB2F
GDF2_AQL: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV DL,'-'
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GDF22_2: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GDF22_2
MOV BL,0
MOV BL,2
JMP RRE2
GDF2_AQL2: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GDF22_21: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GDF22_21
MOV SI,50
COMPF2: DEC SI
MOV AL,NUM1[SI]
CMP AL,NUM2[SI]
JB SUB2FF
JZ COMPF2
SUB1F2: CLC
MOV SI,OFFSET NUM1
MOV DI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
SUBBF2: MOV DL,'-'
MOV AH,02H
INT 21H
MOV AL,[SI]
SBB AL,[DI]
AAS
MOV [BX],AL
INC SI
INC DI
INC BX
DEC CX
JNZ SUBBF2
DEC BX
JMP OUTR
SUB2F2: CLC
MOV DI,OFFSET NUM1
MOV SI,OFFSET NUM2
MOV BX,OFFSET ANS2
MOV CX,50
JMP SUBBF2
RRE2: RET
GDF2 ENDP
;------------------------------------FUHAOCHEN
MUL7: JMP INPTNUM231
KJ1: JMP KJ2
MULF PROC NEAR
CALL GDF3
MOV DI,0
MOV DX,50
MULF_2: MOV SI,0
MOV CX,51
MULF_3: MOV ANS1[SI],0
INC SI
DEC CX
JNZ MULF_3
MOV SI,0
MOV CX,5
CLC
MULF_1: MOV AL,NUM1[SI]
MUL NUM2[DI]
AAM
ADC AL,ANS1[SI]
AAA
MOV ANS1[SI],AL
MOV ANS1[SI+1],AH
INC SI
DEC CX
JNZ MULF_1
MOV SI,0
MOV CX,51
CLC
MULF_4: MOV AL,ANS1[SI]
ADC AL,ANS2[DI]
AAA
MOV ANS2[DI],AL
INC SI
INC DI
DEC CX
JNZ MULF_4
SUB DI,51
INC DI
DEC DX
CMP DX,0
JNZ MULF_2
MOV SI,0
MOV CX,51
MULF_31: MOV ANS1[SI],0
INC SI
DEC CX
JNZ MULF_31
RET
MULF ENDP
KJ0:JMP KJ1
;------------------------------------FUCHENGGDF3
GDF3 PROC NEAR
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GDF3_1: MOV AL,NUM1[SI]
XCHG AL,NUM1[DI]
MOV NUM1[SI],AL
INC SI
INC DI
DEC CX
JNZ GDF3_1
MOV SI,0
ADD SI,49
JMP INPTNUM23
ERROR5: JMP ERROR
INPTNUM23: MOV AH,01H
INT 21H
CMP AL,'-'
JZ KJ0
CMP AL,0DH
JZ GDF3_AQL
SUB AL,30H
CMP AL,09H
JA ERROR5
CMP AL,00H
JL ERROR5
MOV NUM2[SI],AL
DEC SI
INC CX
JMP INPTNUM23
INPTNUM231: MOV AH,01H
INT 21H
CMP AL,'-'
JZ KK1
CMP AL,0DH
JZ GDF3_AQL
SUB AL,30H
CMP AL,09H
JA ERROR5
CMP AL,00H
JL ERROR5
MOV NUM2[SI],AL
DEC SI
INC CX
JMP INPTNUM23
GDF3_AQL: MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV DL,'-'
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
GDF3_2: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ GDF3_2
RET
GDF3 ENDP
ERROR11: JMP ERROR5
KK1: MOV DL,'-'
JMP KK2
KK2: MOV AH,01H
INT 21H
CMP AL,0DH
JZ KK_AQL
SUB AL,30H
CMP AL,09H
JA ERROR11
CMP AL,00H
JL ERROR11
MOV NUM2[SI],AL
DEC SI
INC CX
JMP KK2
KK_AQL:
MOV DL,0AH
MOV AH,02H
INT 21H
MOV DL,'='
MOV AH,02H
INT 21H
MOV SI,CX
SUB SI,50
NOT SI
INC SI
MOV DI,0
KK_2: MOV AL,NUM2[SI]
XCHG AL,NUM2[DI]
MOV NUM2[SI],AL
INC SI
INC DI
DEC CX
JNZ KK_2
JMP OUTR
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -