计算机组成原理实验题.docx
- 文档编号:26118149
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:31
- 大小:20.86KB
计算机组成原理实验题.docx
《计算机组成原理实验题.docx》由会员分享,可在线阅读,更多相关《计算机组成原理实验题.docx(31页珍藏版)》请在冰豆网上搜索。
计算机组成原理实验题
一.这是一个判断某一年是否为润年的程序,运行可执行程序Ifleap.exe后,输入具体的年份,可输出是本年是否为闰年的提示信息。
DATASEGMENT;定义数据段
INFONDB0DH,0AH,'PLEASEINPUTAYEAR:
$';声明空间存储输入提示信息,其中0d回车,0a换行
YDB0DH,0AH,'THISISALEAPYEAR!
$';声明空间存储是闰年提示信息,同上另起一行输出
NDB0DH,0AH,'THISISNOTALEAPYEAR!
$' ;声明空间存储不是闰年提示信息,同上另起一行输出
WDW0;声明空间存储输入年份解析后生成的年份数字
BUFDB8
DB?
DB8DUP(?
) ;声明空间作为缓冲区,总共10个字节,第一个表示准备接受的字
DATAENDS
STACKSEGMENTSTACK
DB200DUP(0)
STACKENDS ;定义一个栈,200字节
CODESEGMENT
ASSUMEDS:
DATA,SS:
STACK,CS:
CODE
START:
MOVAX,DATA
MOVDS,AX;指定堆栈
LEADX,INFON;在屏幕上显示提示信息
MOVAH,9
INT21H;将infon开始的字符串输出到屏幕
LEADX,BUF;从键盘输入年份字符串
MOVAH,10
INT21H
MOVCL,[BUF+1];获取实际输入长度
LEADI,BUF+2 ;获取字符串首地址
CALLDATACATE;调用子程序,将输入字符串传化为年份数字
CALLIFYEARS;调用子程序,判断是否闰年
JCA1;如果进位标记C为1则跳转到a1
LEADX,N;否则输出不是闰年信息
MOVAH,9
INT21H
JMPEXIT
A1:
LEADX,Y ;输出是闰年信息
MOVAH,9
INT21H
EXIT:
MOVAH,4CH ;程序结束
INT21H
DATACATEPROCNEAR;;指明该子程序在主程序段内
PUSHCX;;备份
DECCX
LEASI,BUF+2 ;将buf中第一个字符(即buf的第三个字节数据)的地址赋给si
TT1:
INCSI ;循环,使得si指向最后一个字符(即buf中回车符前面的一个)
LOOPTT1
;LEASI,CX[DI]
POPCX;回复cx
MOVDH,30H;辅助数据,用来将数字字符对应的ASCII码转换为其代表的数字本身
MOVBL,10;辅助数据,用来在每进一位时使得ax乘以10
MOVAX,1;ax用来装对应位的权值
L1:
PUSHAX;备份ax
SUBBYTEPTR[SI],DH;将单个字符转换为对应的数字
MULBYTEPTR[SI];将单个字符转换为对应的数字
ADDW,AX ;加到结果上(易知当所有位都加完时,即是我们想要的年份数字)
POPAX ;恢复ax
MULBL;权值乘以10
DECSI ;si指向更高一位数字
LOOPL1
RET ;子程序返回
DATACATEENDP
IFYEARSPROCNEAR指明该子程序段在主程序段内,该子程序用于检测是否是闰年,接收年份数据,改变C标记位表示不同结果
1. push bx ;备份bx
2. push cx ;备份cx,下面cx用于存储原始年份数据
3.push dx ;备份dx,下面dx用于存储除法余数
4. mov ax,[w] ;获取年份数据
5. mov cx,ax ;将年份数据备份到cx,因为后面做除法时ax值将会改变
6. mov dx,0 ;因为被除数要为32字节,高位在dx,本程序中为0
7. mov bx,100 ;这三行判断是否能被100整除
8. div bx
9. cmp dx,0
10. jnz lab1 ;若不能被100整除,跳转到lab1
11. mov ax,cx ;否则判断能否被400整除
12. mov bx,400
13. div bx
14. cmp dx,0
15. jz lab2 ;若能表示是闰年,跳转到lab2
16. clc ;否则不是闰年,将C标记位清零,并跳转到lab3
17. jmp lab3
18. lab1:
mov ax,cx ;不能被100整除时跳转到此处,进一步判断能否被4整除
19. mov dx,0
20. mov bx,4
21. div bx
22. cmp dx,0
23. jz lab2 ;若不能被100整除但能能被4整除是闰年,跳转到lab2
24. clc ;若不能被100整除也不能被4整除不是闰年,将c标志位置0,并跳转到lab3
25. jmp lab3
26. lab2:
stc ;若是闰年跳转到此处将c标志位置1
27. lab3:
pop dx ;相应寄存器恢复
28. pop cx
29. pop bx
30. ret ;子程序返回
31. ifyears endp
32.code ends
33. end start
34.
MOVAX,W
MOVCX,AX
MOVDX,0
MOVBX,4
DIVBX
CMPDX,0
JNZLAB1
MOVAX,CX
MOVBX,100
DIVBX
CMPDX,0
JNZLAB2
MOVAX,CX
MOVBX,400
DIVBX
CMPDX,0
JZLAB2
LAB1:
CLC
JMPLAB3
LAB2:
STC
LAB3:
POPDX
POPCX
POPBX
RET
IFYEARSENDP
CODEENDS
ENDSTART
二.这是一个显示系统日期和时间的程序,运行时,在出现的提示信息中输入大写字母“D”,可显示系统当前日期;输入大写字母“T”,可显示系统当前时间;输入大写字母“Q”,可结束程序。
STACKSEGMENTSTACK
DW200DUP(?
)
STACKENDS
DATASEGMENT
SPACEDB1000DUP('')
PATTERNDB6DUP(''),0C9H,26DUP(0CDH),0BBH,6DUP('')
DB6DUP(''),0BAH,26DUP(20H),0BAH,6DUP('')
DB6DUP(''),0C8H,26DUP(0CDH),0BCH,6DUP('')
DBUFFERDB8DUP(':
'),12DUP('')
DBUFFER1DB20DUP('')
STRDB0DH,0AH,'PLEASEINPUTDATE(D)ORTIME(T)ORQUIT(Q):
$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,ES:
DATA,SS:
STACK
START:
MOVAX,0001H;设置显示方式为40*25彩色文本方式
INT10H
MOVAX,DATA
MOVDS,AX
MOVES,AX
MOVBP,OFFSETSPACE
MOVDX,0B00H
MOVCX,1000
MOVBX,0040H
MOVAX,1300H
INT10H
MOVBP,OFFSETPATTERN;显示矩形条
MOVDX,0B00H
MOVCX,120
MOVBX,004EH
MOVAX,1301H
INT10H
LEADX,STR;显示提示信息
MOVAH,9
INT21H
MOVAH,1;从键盘输入单个字符
INT21H
CMPAL,44H;AL='D'?
JNEA
CALLDATE;显示系统日期
A:
CMPAL,54H;AL='T'?
JNEB
CALLTIME;显示系统时间
B:
CMPAL,51H;AL='Q'?
JNESTART
MOVAH,4CH;返回dos状态
INT21H
DATEPROCNEAR;显示日期子程序
DISPLAY:
MOVAH,2AH;取日期
INT21H
MOVSI,0
MOVAX,CX
MOVBX,100
DIVBL
MOVBL,AH
CALLBCDASC1;日期数值转换成相应的ASCII码字符
MOVAL,BL
CALLBCDASC1
INCSI
MOVAL,DH
CALLBCDASC1
INCSI
MOVAL,DL
CALLBCDASC1
MOVBP,OFFSETDBUFFER1
MOVDX,0C0DH
MOVCX,20
MOVBX,004EH
MOVAX,1301H
INT10H
MOVAH,02H;设置光标位置
MOVDX,0300H
MOVBH,0
INT10H
MOVBX,0018H
REPEA:
MOVCX,0FFFFH;延时
REPEAT1:
LOOPREPEAT1
DECBX
JNZREPEA
MOVAH,01H;读键盘缓冲区字符到AL寄存器
INT16H
JEDISPLAY
JMPSTART
MOVAX,4C00H
INT21H
RET
DATEENDP
TIMEPROCNEAR;显示时间子程序
DISPLAY1:
MOVSI,0
MOVBX,100
DIVBL
MOVAH,2CH;取时间
INT21H
MOVAL,CH
CALLBCDASC;将时间数值转换成ASCII码字符
INCSI
MOVAL,CL
CALLBCDASC
INCSI
MOVAL,DH
CALLBCDASC
MOVBP,OFFSETDBUFFER
MOVDX,0C0DH
MOVCX,20
MOVBX,004EH
MOVAX,1301H
INT10H
MOVAH,02H
MOVDX,0300H
MOVBH,0
INT10H
MOVBX,0018H
RE:
MOVCX,0FFFFH
REA:
LOOPREA
DECBX
JNZRE
MOVAH,01H
INT16H
JEDISPLAY1
JMPSTART
MOVAX,4C00H
INT21H
RET
TIMEENDP
BCDASCPROCNEAR;时间数值转换成ASCII码字符子程序
PUSHBX
CBW
MOVBL,10
DIVBL
ADDAL,'0'
MOVDBUFFER[SI],AL
INCSI
ADDAH,'0'
MOVDBUFFER[SI],AH
INCSI
POPBX
RET
BCDASCENDP
BCDASC1PROCNEAR;日期数值转换成ASCII码字符子程序
PUSHBX
CBW
MOVBL,10
DIVBL
ADDAL,'0'
MOVDBUFFER1[SI],AL
INCSI
ADDAH,'0'
MOVDBUFFER1[SI],AH
INCSI
POPBX
RET
BCDASC1ENDP
CODEENDS
ENDSTART
三.这是一个显示系统时间的程序,运行时,在屏幕的右上角将以“时:
分:
秒”的形式显示本机系统的时间。
该程序只能在DOS下运行。
cursorequ45H
attribequ2fh
codesegment
assumecs:
code,ds:
code
start:
jmpgo
oldcurdw?
OLD1CDW2DUP(?
)
NEWINT1C:
PUSHF
CALLDWORDPTRCS:
OLD1C
pushax
PUSHBX
PUSHCX
PUSHDX
XORBH,BH
MOVAH,3
INT10H
MOVCS:
OLDCUR,DX
MOVAH,2
xorbh,bh
MOVDX,CURSOR
INT10H
MOVAH,2;读取系统时钟
INT1AH
PUSHDX
PUSHCX
POPBX
PUSHBX
CALLSHOWBYTE
CALLSHOWCOLON
POPBX
XCHGBH,BL
CALLSHOWBYTE
CALLSHOWCOLON
POPBX
CALLSHOWBYTE
MOVDX,CS:
OLDCUR
MOVAH,2
XORBH,BH
INT10H
POPDX
POPCX
POPBX
POPAX
IRET
SHOWBYTEPROCNEAR
PUSHBX
MOVCL,4
MOVAL,BH
SHRAL,CL
ADDAL,30H
CALLSHOW
CALLCURMOVE
POPBX
MOVAL,BH
ANDAL,0FH
ADDAL,30H
CALLSHOW
CALLCURMOVE
RET
SHOWBYTEENDP
SHOWCOLONPROCNEAR
MOVAL,':
'
CALLSHOW
CALLCURMOVE
RET
SHOWCOLONENDP
CURMOVEPROCNEAR
PUSHAX
PUSHBX
PUSHCX
PUSHDX
MOVAH,3
MOVBH,0
INT10H
INCDL
MOVAH,2
INT10H
POPDX
POPCX
POPBX
POPAX
RET
CURMOVEENDP
SHOWPROCNEAR
PUSHAX
PUSHBX
PUSHCX
MOVAH,09H
MOVBX,attrib
MOVCX,1
INT10H
POPCX
POPBX
POPAX
RET
SHOWENDP
GO:
PUSHCS
POPDS
MOVAX,351CH;取中断向量
INT21H
MOVOLD1C,BX;保存原中断向量
MOVBX,ES
MOVOLD1C+2,BX
MOVDX,OFFSETNEWINT1C;置新的中断向量
MOVAX,251CH
INT21H
MOVDX,OFFSETGO
SUBDX,OFFSETSTART
MOVCL,4
SHRDX,CL
ADDDX,11H
MOVAX,3100H;结束并驻留
INT21H
CODEENDS
ENDSTART
四.这是一个网上电子表
datasegment
;*****定义please等提示信息*****
strdb20
db50h,7,0,0
db6ch,7,0,1
db65h,7,0,1
db61h,7,0,1
db73h,7,0,1
db65h,7,0,1
db70h,7,1,-10
db72h,7,0,1
db65h,7,0,1
db73h,7,0,1
db73h,7,0,1
db53h,7,0,2
db6bh,7,0,2
db65h,7,0,1
db79h,7,0,1
db65h,7,0,2
db78h,7,0,1
db69h,7,0,1
db74h,7,0,1
db21h,7,0,1
;*****定义0-9十个图形数字*****
s0db6
db5fh,7,0,0
db7ch,7,1,-1
db7ch,7,1,0
db5fh,7,0,1
db7ch,7,0,1
db7ch,7,-1,0
sydb2
db7ch,7,1,0
db7ch,7,1,0
s2db5
db5fh,7,0,0
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,1,-1
db5fh,7,0,1
s3db5
db5fh,7,0,0
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,1,1
db5fh,7,0,-1
s4db4
db7ch,7,1,0
db5fh,7,0,1
db7ch,7,1,1
db7ch,7,-1,0
s5db5
db5fh,7,0,0
db7ch,7,1,-1
db5fh,7,0,1
db7ch,7,1,1
db5fh,7,0,-1
s6db6
db5fh,7,0,0
db7ch,7,1,-1
db5fh,7,0,1
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,0,-1
s7db3
db5fh,7,0,0
db7ch,7,1,1
db7ch,7,1,0
s8db7
db7ch,7,1,0
db5fh,7,-1,1
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,0,-1
s9db6
db7ch,7,1,0
db5fh,7,-1,1
db7ch,7,1,1
db5fh,7,0,-1
db7ch,7,1,1
db5fh,7,0,-1
s11db2
db03h,7,1,0
db03h,7,1,0
dataends
stacksegment
db200dup(0)
stackends
codesegment
assumecs:
code,ss:
stack,ds:
data
start:
movax,data
movds,ax
movah,0;设置显示方式
moval,4
int10h
movah,0bh;置彩色调板
movbh,0
movbl,1
int10h
movah,0bh;置彩色调板
movbh,1
movbl,4
int10h
movah,2;取系统时间
int1ah
movax,0
movbx,0
movah,ch;取系统时间
moval,cl;保存分钟
movbh,dh;保存秒
movbl,dl;保存百分之一秒
tt:
pushax
pushbx
movah,0
moval,4
int10h
movah,0bh
movbh,0
movbl,1
int10h
movah,0bh
movbh,1
movbl,4
int10h
MOVAH,1;读键盘缓冲区字符
INT16h
JZww
MOVAH,8;从键盘输入字符
INT21h
CMPAL,'s';输入s,结束程序
JEtu
ww:
popbx
popax
callxian;调用显示子程序
pushax
qu:
movah,2;取系统时间
int1ah
cmpbh,dh
jequ
popax
incbh;对时间进行加1
cmpbh,100
jltt
movbh,0
incal
callbeep
cmpal,100
jltt
moval,0
incah
cmpah,24
jltt
movah,0
jmptt
tu:
movah,4ch
int21h
ret
xianproc;对时间值进行处理并显示的子程序
pushsi
pushdi
pushdx
pushcx
pushbx
pushax
popax
pushax
movbx,ax
movax,0
moval,bh
movcl,4
shral,cl
movbl,al
movdh,10
movdl,2
callff
popax
pushax
movbx,ax
movax,0
moval,bh
andal,0fh
movbl,al
movdh,10
movdl,6
callff
movd
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 组成 原理 实验