判断AX中的年份是否闰年,是则将’Y‘显示在屏幕上,否则将’N‘显示在屏幕上(用数据1900、2008、1999做测试)(显示字符使用INT 21H的02号功能)
DATA SEGMENT
;此处输入数据段代码
YEAR DW 2022
X DW ?
Y DW ?
Z DW ?
DATA ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODE SEGMENT 'CODE'
ASSUME CS:CODE,DS:DATA
START:
MOV AX,DATA
MOV DS,AX
;此处输入代码段代码
MOV DX,0H ;DX=0H
MOV AX,YEAR ;AX=2008
;/400
MOV CX,190H ;CX=0190H(400),16位
DIV CX ;AX=AX/CX
;DIV指令:
;如果除数为8位,被除数则为16位,默认在AX中存放
;如果除数为16位,被除数则为32位,在DX和AX中存放,DX存放高16位,AX存放低16位
;如果除数为8位,AL存储商,AH存储余数
;如果除数为16位,AX存储商,DX存储余数
MOV X,DX ;X=0008,为2008/400的余数
MOV DX,0H
MOV AX,YEAR
;/100
MOV BL,64H ;BL=64H(100),8位
DIV BL ;AL=AX/BL
MOV BYTE PTR Y , AH ;Y为2008/100的余数,Y=08H
;BYTE PTR 指明要访问的内存单元为字节单元
MOV DX,0H
MOV AX,YEAR
;/4
MOV BX,BYTE PTR 4H ;BX=0004H
DIV BX
MOV Z,DX ;Z=0000,为2008/4的余数
;判断400整除
OR X,0H ;X=0008
MOV AX,X ;AX=0008
JZ PrintY
;跳转条件ZF=1
;如果运算结果为0,ZF=1,否则ZF=0
;判断不被100整除,被4整除
OR Y,0H ;Y为2008/100的余数,Y=08H
MOV AX,Y ;AX=08H
JZ PrintN
OR Z,0H ;Z=0000,为2008/4的余数
MOV AX,Z ;AX=0000
JZ PrintY
PrintN:
MOV AH,02H
MOV DL,'N'
INT 21H
JMP LEND
PrintY:
MOV AH,02H
MOV DL,'Y'
INT 21H
LEND:
MOV AH,4CH
INT 21H
CODE ENDS
END START