课 课程设计报告
MOV X[2],AL MOV X[3],AH POP BX POP DX POP AX RET
OUTP ENDP
;以下为运算键处理子程序,该程序将第一个运算数据的数值计算出来并存入X1变量 ;或者将第二个运算数据的数值计算出来并存入X2变量 ;将运算符的值存入S变量 COUNT PROC
PUSH AX PUSH BX
PUSH DX MOV DX,0
CALL BITP CMP CC,4 JZ
C4
CMP CC,3 JZ C3 CMP CC,2 JZ C2 JMP C1 C4: MOV AX,0
MOV AL,X[0] MOV BX,1000 MUL BX MOV DX,AX C3: MOV AL,X[1] MOV BL,100 MUL BL ADD DX,AX C2: MOV
AL,X[2]
MOV BL,10 MUL BL ADD DX,AX C1: MOV AL,X[3]
MOV AH,0
ADD DX,AX CMP E,1
JNZ X1_S
MOV X2,DX
JMP EXIT3
X1_S: MOV X1,DX
MOV X[3],0 MOV X[2],0
;测试X中的数据是多少位 ;输入的数据是4位数 ?
;输入的数据是3位数 ? ;输入的数据是2位数 ? ;输入的数据是1位数 ?
按下的是等号,则将第二个运算数据的值存入X2变量
;按下的是运算符号,则将第一个运算数据的值存X1变量
;清空X变量
10
; 课 课程设计报告
MOV X[1],0
MOV X[0],0
EXIT3: POP DX
POP BX POP AX RET
COUNT ENDP
;以下为数字键处理子程序
;该程序,将输入的数据按位存放在X变量中,并由CC记录数据的位数 NUMBER PROC
CMP E,1 JNZ CONTINUE
MOV E,0 CALL CLEAR
CONTINUE:CMP CC,0 ;目前数据为0位,即没有数据,则转到SSS JZ SSS
PUSH
AX
PUSH DX MOV AL,X[3] MOV AH,X[2] MOV DL,X[1] MOV DH,X[0] MOV CX,8
LL:
SHL AX, 1 RCL DX,1 LOOP LL MOV X[3],AL MOV X[2],AH MOV X[1],DL MOV X[0],DH POP DX POP AX
SSS:
MOV INC
[DI],DL ;将当前键入的数据存放到X的最低位 CC ;数据位数加1
CMP CC,4 ;判断数据位数 JNG EXIT2
MOV CC,0 ;如果数据超过4位,重新从最低位开始存放 MOV X[2],0 MOV X[1],0
MOV
EXIT2: CALL RET
NUMBER ENDP
;加法子程序
11
X[0],0
DISP ;调显示子程序,显示输入的数据
课 课程设计报告
ADDP PROC
PUSH AX
MOV AX,X1 ADD AX,X2 MOV Y,AX POP AX RET ADDP ENDP ;减法子程序 SUBP PROC
PUSH AX MOV AX,X1 SUB AX,X2
MOV Y,AX POP AX
RET SUBP ENDP
;乘法子程序 MULP PROC
PUSH AX PUSH
DX MOV AX,X1 MOV DX,X2 MUL DX MOV Y,AX POP DX POP AX RET MULP ENDP
;除法子程序 DIVP PROC
PUSH AX PUSH
BX
PUSH DX MOV DX,0 MOV AX,X1 MOV BX,X2 DIV BX MOV Y,AX POP DX POP BX POP AX RET DIVP ENDP
12
课 课程设计报告
;显示子程序 ,将X中的数值按位显示出来 DISP PROC
PUSH
BX
PUSH AX MOV BH,0
LEA SI,DISCODE CALL CMP JZ CMP JZ CMP JZ CMP
BITP CC,4 QIAN CC,3 BAI CC,2 SHI CC,1
;测试X位数
JMP G JMP NONE
QIAN:
MOV AH,11100000B ;从第4位开始显示 MOV AL,AH OUT 44H,AL MOV BL,X[0] MOV AL,[SI+BX] OUT 42H,AL CALL DELY
MOV AL,0 OUT 42H,AL
MOV AH,11010000B ;从第3位开始显示 MOV AL,AH OUT 44H,AL MOV BL,X[1] MOV AL,[SI+BX] OUT 42H,AL CALL DELY MOV AL,0 OUT 42H,AL
SHI:
MOV MOV OUT MOV MOV
AH,10110000B ;从第2位开始显示 AL,AH 44H,AL BL,X[2] AL,[SI+BX]
BAI:
OUT 42H,AL CALL DELY MOV OUT
G:
MOV
AL,0 42H,AL
AH,01110000B ;从第1位开始显示
13
MOV AL,AH
课 课程设计报告
OUT 44H,AL MOV BL,X[3] MOV OUT
AL,[SI+BX] 42H,AL
CALL DELY JMP EXIT4
NONE: MOV AL,0 ;X中没有数据,不显示
OUT 42H,AL
EXIT4: POP AX
POP BX
RET
DISP ENDP
;分析数据位数子程序 BITP PROC
CMP X[0],0 JNZ FOURBIT CMP X[1],0 JNZ THREEBIT
CMP
X[2],0
JNZ TOWBIT CMP X[3],0 JNZ ONEBIT
JMP ZER0BIT
FOURBIT:
MOV CC,4 JMP EXIT5
THREEBIT: MOV CC,3 JMP EXIT5 TOWBIT:
MOV
CC,2
JMP EXIT5
ONEBIT: MOV CC,1
JMP EXIT5
ZER0BIT: MOV CC,0 EXIT5: RET BITP ENDP
;延时子程序 DELY PROC
PUSH CX
MOV CX,100 LOOP $ POP CX
RET DELY ENDP CODE ENDS
END START
;如果X[0]不为0,则数据为4位数 ;如果X[1]不为0,则数据为3位数 ;如果X[2]不为0,则数据为2位数 ;如果X[3]不为0,则数据为1位数
否则,没有数据
14
;