求这个汇编的逐行解释

来源:百度知道 编辑:UC知道 时间:2024/06/15 21:13:00
data segment ;定义数据段
infon db 0dh,0ah,'Please input a year: $'
Y db 0dh,0ah,'This is a leap year! $'
N db 0dh,0ah,'This is not a leap year! $'
w dw 0
buf db 8
db ?
db 8 dup(?)
data ends

stack segment stack
db 200 dup(0)
stack ends

code segment
assume ds:data,ss:stack,cs:code
start:mov ax,data
mov ds,ax

lea dx,infon ;在屏幕上显示提示信息
mov ah,9
int 21h

lea dx,buf ;从键盘输入年份字符串
mov ah,10
int 21h

mov cl, [buf+1]
lea di,buf+2
call datacate
call ifyears
jc a1

lea dx,n
mov ah,9
int 21h
jmp exit
a1: lea dx,y
mov ah,9

求这个汇编的逐行解释
悬赏分:40 - 离问题结束还有 14 天 16 小时

FUNCTION:函数的功能是通过键盘输入一个年份,判断是否闰年,并在屏幕上输
出提示信息

首先要知道闰年满足的条件:这里有一个闰年的算法

if (year能被4整除 and 不能被100整除) or year能被400整除

下面就是楼主的要求了,程序的注释:

data segment ;定义数据段
infon db 0dh,0ah,'Please input a year: $'
Y db 0dh,0ah,'This is a leap year! $'
N db 0dh,0ah,'This is not a leap year! $' ;提示信息

w dw 0

buf db 8 ;定义一个字符串的存储区
db ? ;buf db 8是定义一个8字节的区域,?是实际输入的长度
db 8 dup(?) ;输入的字符串
data ends

stack segment stack
db 200 dup(0)
stack ends ;定义堆栈

code segment
assume ds:data,ss:stack,cs:code
start:mov ax,data
mov ds,ax

lea dx,infon ;在屏幕上显示提示信息
mov ah,9
int 21h

lea dx,buf ;从键盘输入年份字符串
mov ah,10
int 21h

mov cl, [buf+1] ;cl为实际的字符串长度
lea di,buf+2 ;将字符串的第一个字