编写8086汇编语言源程序,要求:数据区设置变量YEAR中为待查年份,查询该年是否为闰年,如果是,则DL=1,否则DL=0
时间: 2024-05-11 13:14:11 浏览: 129
```
.model small
.stack 100h
.data
YEAR dw 2000 ; 待查年份,这里以2000年为例
.code
mov ax, @data
mov ds, ax ; 初始化数据段寄存器
mov ax, YEAR ; 将待查年份装入AX寄存器
mov bl, 0 ; BL寄存器清零,用于判断是否为闰年
cmp ax, 0 ; 判断年份是否为0
je done ; 如果是0,直接结束程序
mov cx, 4 ; 将CX寄存器设置为4,因为闰年的判断需要4步
check_leap_year:
cmp cx, 0 ; 如果CX寄存器已经为0,表示判断完毕,跳出循环
je done
dec cx ; 将CX寄存器减1,进入下一步判断
cmp cx, 3 ; 判断当前是第几步判断
je check_step_4 ; 如果是第4步判断,跳转到check_step_4标签
; 第1、2、3步判断
mov dx, 0 ; DX寄存器清零,用于存储除以当前要判断的数字的余数
div cx ; 将AX寄存器中的年份除以当前要判断的数字,余数存入DX
cmp dx, 0 ; 判断余数是否为0
jne check_leap_year ; 如果不是,说明当前年份不是闰年,跳回到check_leap_year标签继续判断
inc bl ; 如果是,累加BL寄存器的值
jmp check_leap_year ; 跳回到check_leap_year标签继续判断
check_step_4:
cmp bl, 2 ; 判断BL寄存器的值是否为2
je leap_year ; 如果是,表示当前年份是闰年,跳转到leap_year标签
jmp not_leap_year ; 否则,表示当前年份不是闰年,跳转到not_leap_year标签
leap_year:
mov dl, 1 ; 将DL寄存器设置为1,表示当前年份是闰年
jmp done ; 跳转到done标签,结束程序
not_leap_year:
mov dl, 0 ; 将DL寄存器设置为0,表示当前年份不是闰年
jmp done ; 跳转到done标签,结束程序
done:
mov ah, 4ch ; 结束程序
int 21h
end
```