📄 10详细说明.txt
字号:
DATA SEGMENT
S DB 0DH,0AH,'PLEASE INPUT A NUMBER: ',0AH,0DH,'$'
H DB 0DH,0AH,'PLEASE INPUT A OPERATER: ',0AH,0DH,'$'
p db 0dh,0ah,'please output the result: ',0ah,0dh,'$'
RESULT DB 5 DUP(?),'$' ;结果的存放地
X DB 6,0,6 DUP(?)
I EQU $-X-3 ;输入缓冲区的字符串的长度
R1 DB 5 DUP(?),'$' ;操作数1的存放地
R2 DB 5 DUP(?),'$' ;操作数2的存放地
DATA ENDS
CODE1 SEGMENT
ASSUME DS:DATA,CS:CODE1
START: MOV AX,DATA
MOV DS,AX
CALL FAR PTR DTOBIN ;将第一个操作数转换并放到r1中
MOV WORD PTR R1,AX
MOV DX,OFFSET H ;输入运算符
MOV AH,9
INT 21H
MOV AH,1
INT 21H
push ax ;把运算符入栈
CALL FAR PTR DTOBIN ;将第二个操作数转换并放到r2中
MOV WORD PTR R2,AX
pop ax ;运算符出栈
MOV BH,AL ;判断运算符,并选择相应的操作
CMP BH,'-'
JZ SUB1
CMP BH,'+'
JZ ADD1
CMP BH,'*'
JZ MUL1
CMP BH,'/'
JZ DIV1
SUB1: MOV AX,WORD PTR R1
SUB AX,WORD PTR R2
CALL FAR PTR BTOASC ;把结果转换为十进制,并放到result中
JMP EXIT
ADD1: MOV AX,WORD PTR R1
ADD AX,WORD PTR R2
CALL FAR PTR BTOASC
JMP EXIT
MUL1: MOV DX,0
MOV AX,WORD PTR R1
MUL R2
PUSH AX
MOV AX,DX
CALL FAR PTR BTOASC
POP AX
CALL FAR PTR BTOASC
JMP EXIT
DIV1: MOV DX,0
MOV AX,WORD PTR R1
DIV WORD PTR R2
CALL FAR PTR BTOASC
exit: mov dx,offset p ;输出结果的小程序段
MOV AH,9H
INT 21H
MOV DX,OFFSET RESULT
MOV AH,9H
INT 21H
MOV DX,OFFSET H ;判断程序是否结束,输入y结束,其他字符进行下一次计算
MOV AH,9
INT 21H
MOV AH,1
INT 21H
cmp al,'y'
jz quit
jmp start
quit: MOV AH,4CH
INT 21H
CODE1 ENDS
CODE2 SEGMENT
ASSUME CS:CODE2
DTOBIN PROC FAR ;将无符号的十进制数转换为二进制数
MOV DX,OFFSET S ;入口参数:x的首地址+2
MOV AH,09H
INT 21H
MOV DX,OFFSET X
MOV AH,0AH
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
MOV CX,I
MOV DI,OFFSET X+2
XOR AX,AX
DTOBIN1: MOV DX,10
MUL DX
MOV DL,[DI]
INC DI
AND DL,0FH
XOR DH,DH
ADD AX,DX ;出口参数:AX=转换得到的二进制数
LOOP DTOBIN1
RET
DTOBIN ENDP
BTOASC PROC FAR ;将无符号的二进制数转换为十制数
PUSH AX ;入口参数:AX=欲转换的二进制数
PUSH CX ;出口参数:十进制数的ASCII串放在result中
PUSH DX
PUSH SI
LEA DI,RESULT+4
MOV CX,10
MOV SI,5
BTOASC1: XOR DX,DX
DIV CX
DEC SI
ADD DL,30H
MOV [DI],DL
DEC DI
OR SI,SI
JNZ BTOASC1
POP SI
POP DX
POP CX
POP AX
RET
BTOASC ENDP
CODE2 ENDS
END START
此程序的相应的执行操作:
PLEASE INPUT A NUMBER:
12345
PLEASE INPUT A OPERATER:
+
PLEASE INPUT A NUMBER:
34567
please output the result:
46912
PLEASE INPUT A OPERATER:
n
PLEASE INPUT A NUMBER:
78968
PLEASE INPUT A OPERATER:
-
PLEASE INPUT A NUMBER:
23456
please output the result:
55512
PLEASE INPUT A OPERATER:
n
PLEASE INPUT A NUMBER:
00120
PLEASE INPUT A OPERATER:
*
PLEASE INPUT A NUMBER:
00050
please output the result:
06000
PLEASE INPUT A OPERATER:
n
PLEASE INPUT A NUMBER:
09000
PLEASE INPUT A OPERATER:
/
PLEASE INPUT A NUMBER:
00009
please output the result:
01000
PLEASE INPUT A OPERATER:
y
E:\MASM>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -