- 1、本文档共21页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
计算机组成原理实验题解析
一.这是一个判断某一年是否为润年的程序,运行可执行程序Ifleap.exe后,输入具体的年份,可输出是本年是否为闰年的提示信息。
DATA SEGMENT ;定义数据段
INFON DB 0DH,0AH,PLEASE INPUT A YEAR: $ ;声明空间存储输入提示信息,其中0d回车,0a换行?
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(?)?;声明空间作为缓冲区,总共10个字节,第一个表示准备接受的字?
DATA ENDS
STACK SEGMENT STACK
DB 200 DUP(0)
STACK ENDS??;定义一个栈,200字节??
CODE SEGMENT
ASSUME DS:DATA,SS:STACK,CS:CODE
START:MOV AX,DATA
MOV DS,AX;指定堆栈
LEA DX,INFON ;
MOV AH,9
INT 21H ;将infon开始的字符串输出到屏幕
LEA DX,BUF ;
MOV AH,10
INT 21H
MOV CL, [BUF+1] ;获取实际输入长度
LEA DI,BUF+2 ?;获取字符串首地址??
CALL DATACATE;调用子程序,将输入字符串传化为年份数字??
CALL IFYEARS ;调用子程序,判断是否闰年??
JC A1 ;如果进位标记C为1则跳转到a1?
LEA DX,N ;否则输出不是闰年信息??
MOV AH,9
INT 21H
JMP EXIT
A1: LEA DX,Y ?;输出是闰年信息??
MOV AH,9
INT 21H
EXIT: MOV AH,4CH ?????;程序结束?
INT 21H
DATACATE PROC NEAR ;指明该子程序在主程序段内??
PUSH CX; ;备份
DEC CX
LEA SI,BUF+2?;将buf中第一个字符(即buf的第三个字节数据)的地址赋给si??
TT1: INC SI?;循环,使得si指向最后一个字符(即buf中回车符前面的一个)??
LOOP TT1
;LEA SI,CX[DI]
POP CX;回复cx
MOV DH,30H ;辅助数据,用来将数字字符对应的ASCII码转换为其代表的数字本身?
MOV BL,10;辅助数据,用来在每进一位时使得ax乘以10
MOV AX,1;ax用来装对应位的权值
L1: PUSH AX;备份ax??
SUB BYTE PTR [SI],DH ;将单个字符转换为对应的数字
MUL BYTE PTR [SI];将单个字符转换为对应的数字
ADD W,AX?;加到结果上(易知当所有位都加完时,即是我们想要的年份数字)?
POP AX?;恢复ax?
MUL BL;权值乘以10
DEC SI ?;si指向更高一位数字
LOOP L1
RET?;子程序返回??
DATACATE ENDP
IFYEARS PROC NEAR指明该子程序段在主程序段内,该子程序用于检测是否是闰年,接收年份数据,改变C标记位表示不同结果??
??push??bx?????????????;备份bx
文档评论(0)