📄 test.asm
字号:
DATA SEGMENT
X DW ?
SYMBOL DB ?
Y DW ?
Z DW ?
DISPINFO1 DB 'NOT YUNSUAN CHAR!','$'(不是运算符)
DISPINFO2 DB 'YUSHU IS:$'(余数是:)
CUAN DW 10000,1000,100,10,1
DATA ENDS
CODE SEGMENT
ASSUME DS:DATA,CS:CODE
START: MOV AX,DATA
MOV DS,AX
BINGIN: CALL INPUT(调用输入加转换子程序)
MOV X,BX
MOV SYMBOL,DL(输入运算符时结束第一个数,并把这个存储起来)
CALL INPUT
MOV Y,BX
CMP SYMBOL,'+'
JE JIA
CMP SYMBOL,'-'
JE JIAN
CMP SYMBOL,'*'
JE CHENG
CMP SYMBOL,'/'
JE CHU
LEA DX,DISPINFO1
MOV AH,09H
INT 21H
MOV AH,4CH
INT 21H
JIA: MOV AX,X
ADD AX,Y
JMP EXIT1
JIAN: MOV AX,X
SUB AX,Y
JMP EXIT1
CHENG: MOV AX,X
MUL Y
JMP EXIT1
CHU: MOV AX,X
CWD
DIV Y
PUSH DX
MOV DX,AX
CALL BINTODIN
LEA DX,DISPINFO2
MOV AH,9
INT 21H
POP DX
CALL BINTODIN
JMP LOOP0
EXIT1: MOV Z,AX
MOV DX,AX
CALL BINTODIN
LOOP0: MOV DL,0AH(回车换行)
MOV AH,02H
INT 21H
MOV DL,0DH
INT 21H
MOV AH,01H(可以进行下一个运算)
INT 21H
CMP AL,0DH
JNE BINGIN
MOV AH,4CH
INT 21H
INPUT PROC NEAR(输入并转换子程序)
PUSH AX
MOV AX,0
LOOP1: CALL INP
CMP DL,30H
JB EXIT2
CMP DL,39H
JA EXIT2
SUB DL,30H
MOV BX,0
MOV BL,DL
MOV CL,10
MUL CL
ADD AX,BX
JMP LOOP1
EXIT2: MOV BX,AX
POP AX
RET
INPUT ENDP
INP PROC NEAR(输入一个字符子程序)
PUSH AX
MOV AH,01H
INT 21H
MOV DX,0
MOV DL,AL
POP AX
RET
INP ENDP
BINTODIN PROC NEAR(二进制转换为十进制数并输出显示)
PUSH CX
PUSH BX
MOV CX,5
MOV BX,0
LEA SI,CUAN
LOOP3: SUB DX,[SI]
JB LOOP4
INC BL
JMP LOOP3
LOOP4: ADD DX,[SI]
CMP BL,0
JE LOOP7
LOOP5: PUSH DX
MOV DL,BL
OR DL,30H
MOV AH,2
INT 21H
POP DX
MOV BH,1
JMP LOOP8
LOOP7: CMP BH,1
JE LOOP5(第一个不是0才显示)
LOOP8: ADD SI,2
MOV BL,0
LOOP LOOP3
CMP BH,0(当全为0时,输出一个0)
JNE LOOP9
MOV DL,'0'
MOV AH,2
INT 21H
LOOP9: POP BX
POP CX
RET
BINTODIN ENDP
CODE ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -