;********** Developer : FangFuqiang 方傅强
;********** Class : Computer science and technology 11-01 计算机科学与技术
;********** Student Number : 201150080116
;********** Project name : Calculator(0<n<10) 十以内的四则运算
STACK SEGMENT STACK
DB 100h dup(0)
STACK ENDS
DATA SEGMENT
A DB ?
B DB ?
OP DB ?
ANS DB ?
TEMP DB ?
COUT DB 'Print two number (n<10)',0DH,0AH
DB 'For example : 1+2 or 1*2 or 1-2 or 2/1',0DH,0AH,'$'
COUT1 DB 0AH,'The Answer is :',0AH,'$'
DATA ENDS
CODE SEGMENT
assume cs:CODE, ds:DATA, ss:STACK
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX ;初始化 DS:DX
;输出提示字符串
MOV DX,OFFSET COUT
MOV AH,09H
INT 21H
;输入3个字符
MOV AH,01H
INT 21H
SUB AL,30H
MOV A,AL
MOV AH,01H
INT 21H
MOV OP,AL
MOV AH,01H
INT 21H
SUB AL,30H
MOV B,AL
MOV AH,01H
INT 21H
;输出提示字符
MOV DX,OFFSET COUT1
MOV AH,09H
INT 21H
CMP OP,43
JE ADD0
CMP OP,45
JE SUB0
CMP OP,42
JE MULP
CMP OP,47
JE DIVP
JMP MEND
ADD0:
;求和并比较
MOV AL,A
ADD AL,B ;加法的结果储存在AL
MOV ANS,AL
CMP ANS,10
JA ADD2
CMP ANS,10
JNA ADD1
ADD1:
;小于10,输出两数之和
MOV AL,ANS
ADD AL,30H
MOV DL,AL ;输出的字符存在DL
MOV AH,02H
INT 21H
JMP MEND
ADD2:
;大于10,输出两数之和
MOV DL,31H
MOV AH,02H
INT 21H
ADD ANS,38
MOV DL,ANS
MOV AH,02H
INT 21H
JMP MEND
MULP:
JMP MUL0
SUB0:
;判断是否A>B
MOV AL,A
CMP AL,B
JNB SUB1
CMP AL,B
JB SUB2
SUB1:
;A>B
MOV AL,A
SUB AL,B
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
JMP MEND
SUB2:
;A<B
MOV DL,45
MOV AH,02H
INT 21H
MOV AL,B
SUB AL,A
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
JMP MEND
DIVP:
JMP DIV0
MUL0:
;乘法,判断位数
MOV AL,A
MUL B
MOV ANS,AL
CMP ANS,09H
JA MUL1
CMP ANS,09H
JNA MUL2
MUL1:
;如果乘积是两位数
MOV AL,ANS
MOV ANS,0AH
DIV ANS
MOV B,AH
ADD AL,30H
MOV DL,AL;输出十位数
MOV AH,02H
INT 21H
MOV AL,B
ADD AL,30H
MOV DL,AL;输出个位数
MOV AH,02H
INT 21H
JMP MEND
MUL2:
;如果乘积是一位数
MOV AL,ANS
ADD AL,30H
MOV DL,AL
MOV AH,02H
INT 21H
JMP MEND
DIV0:
;除法
XOR AL,AL
XOR AH,AH
MOV AL,A
DIV B
MOV ANS,AL
ADD ANS,30H
MOV DL,ANS
MOV AH,02H
INT 21H
JMP MEND
MEND:
;按任意键退出
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN
;********** Developer : FangFuqiang 方傅强
;********** Class : Computer science and technology 11-01 计算机科学与技术
;********** Student Number : 201150080116
;********** Project name : Is it a leap year? 闰年判断 5位数以内
STACK SEGMENT STACK
DB 100H DUP(0)
STACK ENDS
DATA SEGMENT
YEAR_BUF DB 6
YEAR_LEN DB ?
YEAR DB 100 DUP('$')
SUM DW 0
COUT DB 'Input a year: (Example: 1990)',0DH,0AH,'$'
COUT1 DB 0DH,0AH,'IT IS A LEAP YEAR',0DH,0AH,'$'
COUT2 DB 0DH,0AH,'IT IS NOT A LEAP YEAR',0DH,0AH,'$'
ENT DB 0AH,'$'
DATA ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX;初始化 DS:DX
MOV DX,OFFSET COUT;输出提示字符串
MOV AH,09H
INT 21H
MOV DX,OFFSET YEAR_BUF;储存输入进缓存
MOV AH,0AH
INT 21H
MOV DX,OFFSET ENT;输出一个换行符
MOV AH,09H
INT 21H
MOV DI,OFFSET YEAR;实际字符串
MOV SI,10
MOV SUM,0000H
MOV CL,YEAR_LEN;字符串个数
JMP LOOP_A
LOOP_A:;转换字符串为数字
XOR AX,AX
XOR BX,BX
MOV BL,[DI]
SUB BL,30H
MOV AX,SUM
MUL SI
ADD AX,BX
MOV SUM,AX
MOV AX,SUM
INC DI
LOOP LOOP_A
;判断是否能被400整除
XOR DX,DX
XOR AX,AX
MOV AX,SUM
MOV BX,400
DIV BX
CMP DX,0000H
JE OUT1
;判断是否能被100整除
XOR DX,DX
XOR AX,AX
MOV AX,SUM
MOV BX,100
DIV BX
CMP DX,0
JE OUT2
;判断是否能被4整除
XOR DX,DX
XOR AX,AX
MOV AX,SUM
MOV BX,4
DIV BX
CMP DX,0
JE OUT1
;不能被4整除
JMP OUT2
OUT1:;是闰年
MOV DX,OFFSET COUT1;输出提示字符串
MOV AH,09H
INT 21H
JMP ENDME
OUT2:;不是闰年
MOV DX,OFFSET COUT2;输出提示字符串
MOV AH,09H
INT 21H
JMP ENDME
ENDME:;结束中断
MOV AH,4CH
INT 21H
MAIN ENDP
CODE ENDS
END MAIN