?? counter.asm
;顯示字符的宏定義
DISP MACRO CHAR
PUSH AX
PUSH DX ;保存DX和AX
MOV DL,CHAR ;顯示字符
MOV AH,2
INT 21H
POP DX
POP AX
ENDM
;
;
DSEG SEGMENT
DATA DB 10 DUP (?)
RESULT DB 5 DUP (?)
TABLE1 DB 'The symbol is wrong!',0AH,0DH,'$'
TABLE2 DB 'The result is:',0AH,0DH,'$'
TABLE3 DB 'and the arithmetical compliment is:','$'
TABLE4 DB 'Please import the expressions:',0AH,0DH,'$'
TABLE5 DB 'EXPLAIN:Please the mun less than 255.After you improt the first mun,please import space.afte the second mun,import enter',0AH,0DH,'$'
DSEG ENDS
SSEG SEGMENT STACK 'STACK'
DB 100 DUP (?)
SSEG ENDS
;
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,SS:SSEG
START:
MOV AX,DSEG ;初始化數據段
MOV DS,AX
MOV AX,SSEG
MOV SS,AX
LEA DX,TABLE5
MOV AH,9
INT 21H
BEGIN: MOV AH,1
INT 21H
CMP AL,0DH
JZ L0
CMP AL,1BH
JZ LLL
JMP BEGIN
LLL:
MOV AH,4CH
INT 21H
L0:
LEA DX,TABLE4
MOV AH,9
INT 21H
MOV SI,OFFSET DATA
MOV CL,0
;以下為輸入數據程序段
L1:
MOV AH,1
INT 21H
CMP AL,20H
JZ L2 ;yes
MOV [SI],AL
INC SI
INC CL
JMP L1
L2:
CMP CL,2
JZ L3
CMP CL,3
JZ L4
MOV AL,DATA ; ONE BIT
SUB AL,30H
MOV DATA+6,AL
JMP L5
;TWO BIT
L3:
MOV AL,DATA
SUB AL,30H
MOV BH,DATA+1
SUB BH,30H
MOV BL,10
MUL BL
ADD AL,BH
MOV DATA+6,AL
JMP L5
; THREE BIT
L4:
MOV AL,DATA+1
SUB AL,30H
MOV BH,DATA+2
SUB BH,30H
MOV BL,10
MUL BL
ADD AL,BH
MOV BH,AL
MOV AL,DATA
SUB AL,30H
MOV BL,100
MUL BL
ADD AL,BH
MOV DATA+6,AL
JMP L5
;輸入運算符號
L5:
MOV AH,1
INT 21H
MOV DATA+7,AL
DISP 20H
MOV SI,OFFSET DATA
MOV CL,0
;
L6:
MOV AH,1
INT 21H
CMP AL,0DH
JZ L7 ;yes
MOV [SI],AL
INC SI
INC CL
JMP L6
L7:
CMP CL,2
JZ L8
CMP CL,3
JZ L9
MOV AL,DATA ; ONE BIT
SUB AL,30H
MOV DATA+8,AL
JMP M1
;TWO BIT
L8:
MOV AL,DATA
SUB AL,30H
MOV BH,DATA+1
SUB BH,30H
MOV BL,10
MUL BL
ADD AL,BH
MOV DATA+8,AL
JMP M1
; THREE BIT
L9:
MOV AL,DATA+1
SUB AL,30H
MOV BH,DATA+2
SUB BH,30H
MOV BL,10
MUL BL
ADD AL,BH
MOV BH,AL
MOV AL,DATA
SUB AL,30H
MOV BL,100
MUL BL
ADD AL,BH
MOV DATA+8,AL
JMP M1
; 以下為計算過程
M1:
MOV DL,0AH
MOV AH,2
INT 21H
MOV DL,0DH
MOV AH,2
INT 21H
LEA DX,TABLE2
MOV AH,9
INT 21H
M2:
MOV AL,DATA+7
CMP AL,2BH
JE M4
CMP AL,2DH
JE M5
CMP AL,2AH
JE M6
CMP AL,2FH
JE M7
MOV AH,2
MOV AL,0AH
INT 21H
MOV AH,2
INT 21
LEA DX,TABLE1
MOV AH,9
INT 21H
JMP START
M4: MOV AH,0
MOV AL,DATA+6
MOV BH,0
MOV BL,DATA+8
ADD AX,BX
MOV RESULT+1,AH
MOV RESULT,AL
JMP M8
M5:
MOV AL,DATA+6
MOV BL,DATA+8
SUB AL,BL
MOV RESULT+1,0
MOV RESULT,AL
JMP M8
M6:
MOV AL,DATA+6
MOV BL,DATA+8
MUL BL
MOV RESULT,AL
MOV RESULT+1,AH
JMP M8
M7: MOV AH,0
MOV AL,DATA+6
MOV BL,DATA+8
DIV BL
MOV RESULT+1,0
MOV RESULT,AL
MOV RESULT+2,AH
JMP M8
LL: JMP BEGIN
;以下為顯示程序
M8:
MOV AL,RESULT
MOV AH,RESULT+1
;FIVE BITS
CMP AX,2710H
JB M13
MOV DX,0
MOV BX,2710H
DIV BX
MOV CX,DX
AAM
ADD AL,30H
DISP AL
MOV AX,CX
MOV BL,100
DIV BL
MOV CL,AH
MOV AH,0
AAM
ADD AX,3030H
DISP AH
DISP AL
MOV AL,CL
MOV AH,0
AAM
ADD AX,3030H
DISP AH
DISP AL
JMP M12
;FOUR BITS
M13: CMP AX,03E8H
JB M9
MOV BL,100
DIV BL
MOV CL,AH
MOV AH,0
AAM
ADD AX,3030H
DISP AH
DISP AL
MOV AL,CL
MOV AH,0
AAM
ADD AX,3030H
DISP AH
DISP AL
JMP M12
;THREE BITS
M9:
CMP AX,100
JB M10
MOV BL,100
DIV BL
MOV CL,AH
MOV AH,0
AAM
ADD AL,30H
DISP AL
MOV AL,CL
MOV AH,0
AAM
ADD AX,3030H
DISP AH
DISP AL
MOV AL,DATA+7
CMP AL,2FH
JZ M14
JMP M12
;TOW BITS
M10:
CMP AX,10
JB M11
AAM
ADD AX,3030H
DISP AH
DISP AL
MOV AL,DATA+7
CMP AL,2FH
JZ M14
JMP M12
;ONE BITS
M11:
ADD AL,30H
DISP AL
MOV AL,DATA+7
CMP AL,2FH
JZ M14
JMP M12
M14:
DISP 20H
LEA DX,TABLE3
MOV AH,9
INT 21H
MOV AH,0
MOV AL,RESULT+2
AAM
ADD AX,3030H
DISP AH
DISP AL
JMP M12
M12:
DISP 0AH
DISP 0DH
JMP LL
CSEG ENDS
END START
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -