?? 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 + -