编程写一个完整的汇编程序,求出2012年~2099年中的所有闰年年份,并把闰年年份存放在数组Lyear中,闰年个数放在变量Lcounter中。
时间: 2024-06-10 15:10:22 浏览: 56
这是一个x86汇编程序,使用DOS中断21h进行输入输出。
```
.model small
.stack 100h
.data
Lyear dw 88h dup(0)
Lcounter dw ?
msg1 db '闰年年份:$'
msg2 db '共有闰年 ', 0
input db 13, 10, '请输入开始年份(2012~2099):$'
output db 13, 10, '输出完毕!$'
.code
main proc
mov ax, @data
mov ds, ax ; 初始化数据段
; 输出提示信息
mov ah, 9
lea dx, input
int 21h
; 读取输入的年份
mov ah, 1
int 21h ; AL为ASCII码
sub al, 30h ; 转换为数字
mov bl, al
mov ah, 1
int 21h
sub al, 30h
mov bh, al
mov ax, 2000h
add ax, bx
mov bx, ax ; BX为开始年份
; 计算闰年年份并存储到数组中
mov cx, 88h ; 数组Lyear的长度
mov si, 0 ; 数组Lyear的索引
mov Lcounter, 0 ; 闰年个数初始化为0
mov dx, 0 ; DX用于保存余数
next_year:
mov ax, bx
mov dx, 0
div word ptr 4 ; 除以4,余数保存在DX中
cmp dx, 0
jne not_leap_year
mov dx, 0
div word ptr 100 ; 除以100,余数保存在DX中
cmp dx, 0
je not_leap_year
mov dx, 0
div word ptr 400 ; 除以400,余数保存在DX中
cmp dx, 0
jne not_leap_year
mov ax, bx
mov Lyear[si], ax ; 存储闰年年份到数组Lyear中
inc si
inc Lcounter ; 闰年个数加1
not_leap_year:
inc bx
loop next_year
; 输出闰年年份
mov ah, 9
lea dx, msg1
int 21h
mov cx, Lcounter ; 循环次数为闰年个数
mov si, 0 ; 数组Lyear的索引
print_year:
mov ax, Lyear[si] ; 从数组Lyear中取出一个闰年年份
add al, 30h ; 转换为ASCII码
mov ah, 0
mov dl, al
int 21h
mov al, ah
add al, 30h
mov ah, 0
mov dl, al
int 21h
mov dl, ','
int 21h
inc si
loop print_year
mov dl, 13
int 21h
mov dl, 10
int 21h
; 输出闰年个数
mov ah, 9
lea dx, msg2
int 21h
mov ax, Lcounter
add al, 30h
mov ah, 0
mov dl, al
int 21h
mov dl, 13
int 21h
mov dl, 10
int 21h
; 输出完成信息
mov ah, 9
lea dx, output
int 21h
; 程序结束
mov ah, 4ch
int 21h
main endp
end main
```
阅读全文