版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1/1《计算机硬件技术基础》实验参考程序2《计算机硬件技术基础》试验参考程序
试验一:简洁程序设计试验
(1)编写一个32位无符号数除法的程序,要求将存放在NUM1中的32位无符号数与存放在NUM2中的16位无符号数相除,结果存放在NUM3和NUM4中。
程序流程图略。
参考源程序:
DATASEGMENT
NUM1DD2A8B7654H
NUM2DW5ABCH
NUM3DW?
NUM4DW?
DATAENDS
CODESEGMENT
ASSUMEDS:DATA,CS:CODE
START:MOVAX,DATA;数据段寄存器初始化
MOVDS,AX
MOVAX,WORDPTRNUM1
MOVDX,WORDPTRNUM1+2
DIVNUM2
MOVNUM3,AX
MOVNUM4,DX
MOVAH,4CH;正常返回DOS系统
INT21H
CODEENDS
ENDSTART
(2)编写一个拆字程序。要求将存放在ARY单元的2位十六进制数X1X2拆为X1和X2两部分,并以0X1和0X2的形式分别存入ARY+1和ARY+2单元中。
程序流程图略。
参考源程序:
DATASEGMENT
ARYDB2AH,?,?
DATAENDS
CODESEGMENT
ASSUMEDS:DATA,CS:CODE
START:MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETARY;取ARY的偏移地址
MOVAL,[SI];取16进制数至AL
第1页共31页
《计算机硬件技术基础》试验参考程序
MOVBL,AL
ANDAL,0F0H;取16进制数的高四位,即X1
SHRAL,4
MOV[SI+1],AL;存0X1
MOVAL,BL
ANDAL,0FH;取16进制数的低四位,即X2
MOV[SI+2],AL;存0X2
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
第2页共31页
《计算机硬件技术基础》试验参考程序
试验二:分支程序设计试验
(1)编写一个字符比较程序,比较3个无符号字节数A,B,C的大小,并依据比较结果对变量K赋值:
假如3个数不相等,则K=0;
假如3个数中有两个相等,则K=1;
假如3个数都相等,则K=2。
程序流程图略。
参考源程序:
DATASEGMENT;定义待比较数A、B、C,比较结果K
AD
B20H
BDB20H
CDB20H
KDB?
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAL,A
CMPAL,B;对A、B进行比较,不相等则转到COMP2
JNECOMP2;相等则比较A、C
CMPAL,C
JNEK1;A、C不相等则K=1
JMPK2;A、C相等则K=2
COMP2:MOVBL,B
CMPBL,C
JEK1;对B、C进行比较,相等则K=1
CMPAL,C
JEK1;对A、C进行比较,相等则K=1
K0:MOVK,0
JMPEXIT
K1:MOVK,1
JMPEXIT
K2:MOVK,2
EXIT:MOVAH,4CH
第3页共31页
《计算机硬件技术基础》试验参考程序
第4页共31页INT21H
CODEENDS
ENDSTART
(2)编写一个能实现下列表达式的程序:
?N=?A+BA≤B设A,B,C为小于128的正整数。?
A?
B+
C程序流程图略。
参考源程序:
DATASEGMENT
A
BADB22H
;定义A、B、C、NBDB10H
CDB01H
NDB?
DATA
ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVAL,A
CMPAL,B
JGCALCUL
;A小于或等于B则N=A+B
ADDAL,B
JMPEXIT
CALCUL:SUBAL,B
ADCAL,C
EXIT:MOVN,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
《计算机硬件技术基础》试验参考程序
试验三循环程序设计试验
(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1”而加上了校验位。统计结果存于N单元中。
程序流程图略。
参考源程序:
DATASEGMENT
STRNDBWhat$;任意定义一个字串,以“$”结尾
COUNTEQU$-STRN;count=size(strn)
NDB?
BUFDBCOUNTDUP(?)buf=???...(count个)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,DATA
MOVES,AX
LEASI,STRN;si=strn的偏移地址
LEADI,BUF
MOVCX,COUNT
MOVAL,0
LP1:MOVBL,[SI];逐个取字符进行推断
ANDBL,BL;自己和自己做与运算
JPNEXT;依据PF标志位的变化进行跳转,偶数个1跳转INCAL
ORBL,80H
NEXT:MOV[DI],BL
INCSI
INCDI
LOOPLP1
MOVN,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
第5页共31页
《计算机硬件技术基础》试验参考程序
(2)在FIRST开头的一片连续的数据区中存放着100个数据,编写一个程序,统计第1
第6页共31页
《计算机硬件技术基础》试验参考程序
个数据…0?之前的数据个数。
程序流程图略。参考源程
序:
DATASEGMENT
FIRSTDB10H,24H,34H,73H,20H,44H,03H,36H,41H;任取9个数做演示
COUNTEQU$-FIRST
NUMDB?
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVDL,0;计数值初始为0
MOVCX,COUNT
MOVBX,OFFSETFIRST
LP1:MOVAL,[BX];每次取一个数,与0比较CMPAL,00H
JNENEXT;不等转移
JMPEXIT;找到0则退出
NEXT:INCDL;没找到0则计数值加1INCBX
LOOPLP1
EXIT:MOVNUM,DL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
第7页共31页
《计算机硬件技术基础》试验参考程序
试验四:子程序设计试验
将BUF开头的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。要求码型转换通过子程序HEXASC实现,参数传送采纳寄存器传送方式。
程序流程图略。参考源程序:
(1)实现方法一:远过程调用
DATASEGMENT
BUFDB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H
COUNTEQU$-BUF;定义任意长度的一段BUF
DATAENDS
STACK1SEGMENTSTACK
DB100DUP(?);设置足够深度的栈区
STACK1ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK1
START:MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF
MOVCX,COUNT
AGAIN:MOVAL,[SI];逐个取数
MOVBL,AL
SHRAL,4
ANDAL,0FH;先对高字节部分转换(寄存器AL传参)
CALLFARPTRHEXASC;调用子程序
MOVDL,AL
MOVAH,02H;显示高字节部分对应的字符
INT21H
MOVAL,BL
ANDAL,0FH;再对低字节部分转换(寄存器AL传参)
CALLFARPTRHEXASC;调用子程序
MOVDL,AL
MOVAH,02H;显示低字节部分对应的字符
INT21H
MOVDL,20H
MOVAH,02H;显示空格
INT21H
第8页共31页
《计算机硬件技术基础》试验参考程序
INCSI
LOOPAGAIN
MOVAH,4CH
INT21H
CODEENDS
CODEBSEGMENT
ASSUMECS:CODEB
HEXASCPROCFAR
CMPAL,09H;推断是不是数字
JAHEXATOF;是字母则转到HEXATOF
ADDAL,30H;是数字则对应到数字的ASCII码
JMPENDHEX
HEXATOF:ADDAL,37H;是字母则对应到字母的ASCII码ENDHEX:RET
HEXASCENDP
CODEBENDS
ENDSTART
(2)实现方法二:近过程调用
DATASEGMENT
BUFDB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H
COUNTEQU$-BUF;定义任意长度的一段BUF
DATAENDS
STACK1SEGMENTSTACK
DB100DUP(?);设置足够深度的栈区
STACK1ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK1
START:MOVAX,DATA
MOVDS,AX
MOVSI,OFFSETBUF
MOVCX,COUNT
AGAIN:MOVAL,[SI];逐个取数
MOVBL,AL
SHRAL,4
ANDAL,0FH;先对高字节部分做转换
CALLHEXASC
第9页共31页
《计算机硬件技术基础》试验参考程序
MOVDL,AL;显示高字节部分对应的字符
MOVAH,02H
INT21H
MOVAL,BL
ANDAL,0FH;再对低字节部分做转换
CALLHEXASC
MOVDL,AL;显示低字节部分对应的字符
MOVAH,02H
INT21H
MOVDL,20H;显示空格
MOVAH,02H
INT21H
INCSI;连续循环或退出
LOOPAGAIN
MOVAH,4CH
INT21H
HEXASCPROCNEAR
CMPAL,09H
JAHEXATOF
ADDAL,30H
JMPENDHEX
HEXATOF:ADDAL,37H
ENDHEX:RET
HEXASCENDP
CODEENDS
ENDSTART
第10页共31页
《计算机硬件技术基础》试验参考程序
试验五:DOS中断调用试验
(1)假如从键盘上依次输入的是一个数字和一个字母,则输出“RIGHT”标记后结束程序,否则输出标记“ERROR”后转向原出错处重做。试编程实现该功能。
程序流程图略。
参考源程序:
DATASEGMENT
MSGDB0AH,0DH,RIGHT,0AH,0DH,$
WRNDB0AH,0DH,ERROR,0AH,0DH,$
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
AGAIN:MOVAH,01H;等待用户输入1个字符并显示INT21H
CMPAL,39H
JAEMSG
CMPAL,30H
JBEMSG;推断输入是否是数字,不是则报错
MOVAH,01H;等待用户输入1个字符并显示
INT21H
CMPAL,A
JBEMSG
CMPAL,Z;推断输入是否是大写字母,不是则连续
JBEXIT;推断是不是小写字母
CMPAL,a
JBEMSG
CMPAL,z
JBEXIT;不是字母则报错,是字母则转到EXIT
EMSG:LEADX,WRN
MOVAH,09H
INT21H
JMPAGAIN
EXIT:MOVDX,OFFSETMSG
MOVAH,09H;显示“RIGHT”并退出
INT21H
MOVAH,4CH
第11页共31页
《计算机硬件技术基础》试验参考程序
INT21H
CODEENDS
ENDSTART
(2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数不超过50个,该字符串用回车作为结束),并按数字、字母和其它字符分类计数,然后将结果存入digit、letter和other3个存储单元中,并显示结果。
程序流程图略。
参考源程序:
DATASEGMENT
MSG1DB0AH,0DH,Numberofdigit:,20H,$
MSG2DB0AH,0DH,Numberofletters:,20H,$
MSG3DB0AH,0DH,Numberofothercharacters:,20H,$
BUFDB50
DB0
DB50DUP(?);设置足够深的栈区
DIGITDB?
LETTERDB?
OTHERDB?
DATAENDS
STACK1SEGMENTSTACK
DB100DUP(?)
STACK1ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK1
START:MOVAX,DATA
MOVDS,AX
MOVAH,0AH;等待用户输入字符串并显示
MOVDX,OFFSETBUF
INT21H
MOVSI,OFFSETBUF
MOVCL,[SI+1]
MOVCH,00H
MOVAL,00H
MOVAH,00H
MOVBH,00H
AGAIN:MOVBL,[SI+2]
CMPBL,30H
JBOTH;ASCII码小于30H则归类为“其它”
CMPBL,3AH
第12页共31页
《计算机硬件技术基础》试验参考程序
第13页共31页MOVLETTER,BH
MOVOTHER,AL
MOVDX,OFFSETMSG1MOVAH,09H
INT21H
MOVAL,DIGIT
CALLDISP
;显示“数字”有多少个
MOVDX,OFFSETMSG2MOVAH,09H
INT21H
MOVAL,LETTER
CALLDISP
;显示“字母”有多少个
MOVDX,OFFSETMSG3MOVAH,09H
INT21H
MOVAL,OTHER
CALLDISP
;显示“其它”有多少个MOVAH,4CH
INT21H
DISP
PROCNEAR
;显示子程序
JBDIG
;ASCII码大于等于30H小于3AH则归类为“数字”CMPBL,41H
JBOTH
;ASCII码大于等于3AH小于41H则归类为“其它”CMPBL,5BH
JBLET
;ASCII码大于等于41H小于5BH则归类为“字母”CMPBL,61H
JBOTH
;ASCII码大于等于5BH小于61H则归类为“其它”CMPBL,7BH
JBLET
;ASCII码大于等于61H小于7BH则归类为“字母”
OTH:INCAL
;“其它”计数器加1DIG:JMPENDLPINCAH
;“数字”计数器加1LET:JMPENDLPINCBH
;“字母”计数器加1ENDLP:INCSI
LOOPAGAIN
;连续循环
MOVDIGIT,AH
;统计各类个数
《计算机硬件技术基础》试验参考程序
MOVAH,00H
MOVDH,0AH
DIVDH
MOVCH,AH
ADDAL,30H
MOVDL,AL
MOVAH,02H
INT21H
ADDCH,30H
MOVDL,CH
MOVAH,02H
INT21H
RET
DISPENDP
CODEENDS
ENDSTART
第14页共31页
《计算机硬件技术基础》试验参考程序
试验六:扩展定时器/计数器接口试验
(1)计数器0工作于方式3,编写初始化程序,观看其输出OUT0信号的波形。修改计数初值,观看OUT0信号的变化状况。硬件连接方法:8254计数器0的CLK0端接规章的脉冲输入(频率自选),OUT0接示波器的正极;示波器负极接地。
程序流程图略。
参考源程序:
DATASEGMENT
DB100DUP(?)
DATAENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVDX,20FH;写入计数器0的掌握字
MOVAL,00010110B
OUTDX,AL
MOVDX,20CH;写入计数器0的计数初值
MOVAL,05H
OUTDX,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
(2)将计数器1和计数器0级联起来,二者均工作于方式3,编写初始化程序,观看OUT1和OUT0信号的波形,说明二者的关系。修改计数初值,观看OUT0和OUT1输出波形的变化状况。硬件连接方法:8254计数器1的CLK1端接规章的脉冲输入(频率自选),OUT1接8254计数器0的CLK0,计数器0的输出OUT0接示波器正极;示波器负极接地。
程序流程图略。
参考源程序:
DATASEGMENT
DB100DUP(?)
DATAENDS
CODESEGMENT
第15页共31页
《计算机硬件技术基础》试验参考程序
ASSUMECS:CODE,DS:DATA
START:MOVAX,DATA
MOVDS,AX
MOVDX,20FH
MOVAL,00010110B;写入计数器0的掌握字
OUTDX,AL
MOVDX,20CH;写入计数器0的计数初值
MOVAL,05H
OUTDX,AL
MOVDX,20FH
MOVAL,01010110B;写入计数器1的掌握字
OUTDX,AL
MOVDX,20DH;写入计数器1的计数初值
MOVAL,02H
OUTDX,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
第16页共31页
《计算机硬件技术基础》试验参考程序
第17页共31页试验七:并行输入/输出接口8255A简洁编程试验
(1)利用8255A的B口输出掌握两组发光二级管L1,L3,L5,L7和L2,L4,L6,L8亮灭交替变化。
分析:
根据题目要求,当8255A的B口输出为01010101B(55H)时,发光二极管L1,L3,L5,L7会被点亮,当8255A的B口输出为10101010B(0AAH)时,发光二极管L2,L4,L6,L8会被点亮。因此,通过延时转变8255A的B口输出,即可实现两组发光二极管的亮灭交替变化。由于LED随时出于预备好的状态,因此8255A的B口可工作于方式0输出,其它端口未使用,无需考虑。因此,8255A的方式掌握字为:10000000B(80H)。
硬件连接方法:
8255A的B口PB0~PB7分别连接L1~L8。
程序流程图略。
参考源程序:
.486
DATASEGMENT
PORTADW208H
;8255A端口A地址PORTBDW209H
;8255A端口B地址PORTCDW20AH
;8255A端口C地址PORT_CTRDW20BH;8255A掌握端口地址
DATA
ENDS
STACK1SEGMENTSTACK
DB100DUP(?)
STACK1ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK1
START:MOVAX,DATA
MOVDS,AX
MOVDX,PORT_CTR
MOVAL,10000000B
;8255A初始化;掌握字OUTDX,AL
MOVDX,PORTB
MOVAL,00H
OUTDX,AL;8255A端口B清零,LED初始化(全灭)
LP0:
MOVBL,01010101B
MOVAL,BL
OUTDX,AL
CALLDELAY
《计算机硬件技术基础》试验参考程序
NOTAL
MOVBL,AL
MOVAH,01H;调用BIOS的16H功能推断键盘是否有输入
INT16H
JNZEXIT
JMPLP0
EXIT:MOVAH,4CH
INT21H
DELAYPROCNEAR;延时子程序(可通过修改NOP指令数量转变延时时间)MOVECX,0FFFFFFFH
LP2:NOP
LOOPDLP2
RET
DELAYENDP
CODEENDS
ENDSTART
(2)利用8255A的A口读入8个开关K1~K8的状态,当只有K1合上时,L1~L8显示00000001B;当只有K1和K2合上时,L1~L8显示00000010B;当只有K1,K2和K3合上时,L1~L8显示00000011B;当只有K1,K2,K3和K4合上时,L1~L8显示00000100B;…直到全部开关合上时,L1~L8显示00001000B,并结束程序的运行。发光二极管的状态通过8255A的B口进行掌握。
分析:
根据题目要求,可以通过查询的方式读取8255A的B口状态,并依据查询的结果给A口送出相应数据,A口工作在方式0的输入状态,B口工作在方式0输出状态,C口不需要考虑,所以8255A的方式掌握字为:10010000B)
硬件连接方法:
(1)8255A的A口PA0~PA7对应连接K1~K8;
(2)8255A的B口PB0~PB7对应连接L1~L8;
源代码:
DATASEGMENT
LISTDB01H,03H,07H,0FH,1FH,3FH,7FH,0FFH
DATAENDS
STACK1SEGMENTSTACK
DB100DUP(?)
STACK1ENDS
CODESEGMENT
ASSUMECS:CODE,DS:DATA,SS:STACK1
START:MOVAX,DATA
第18页共31页
《计算机硬件技术基础》试验参考程序
第19页共31页MOVDS,AX
MOVDX,20BH
;8255A初始化MOVAL,10010000B
OUTDX,AL
MOVDX,209H
;8255A的B口清零,LED初始化(全灭)MOVAL,00H
OUTDX,AL
L0:
MOVDX,208H;读8255A的A口,获得开关状态INAL,DX
MOVBL,00H
MOVCX,8
MOVSI,OFFSETLIST
L1:INCBL
CMPAL,[SI]
JZFIND
INCSI
LOOPL1
JMPL0
FIND:MOVAL,BL
MOVDX,209H
;当前开关状态为表中所列状态之一;显示LED状态OUTDX,AL
CMPAL,08H
JNZL0
MOVAH,4CHINT21H
CODEENDS
ENDSTART
《计算机硬件技术基础》试验参考程序
第20页共31页DATASEGMENT
PORT0DW20CH;8254计数器0端口地址PORT1DW20DH;8254计数器1端口地址PORT2DW20EH;8254计数器2端口地址
PORT3DW20FH;8254掌握寄存器端口地址PORTADW208H;8255A的A口端口地址
PORTBDW209H;8255A的B口端口地址PORTCDW20AH;8255A的C口端口地址DATAPORT_CTRDW20BHENDS;8255A的掌握寄存器端口地址
试验八:并行输入/输出接口8255A综合应用试验
(1)利用8254计数器0、计数器1和8255A的B口实现对发光二极管的定时掌握,让8个发光二极管每隔1s从左到右依次点亮。(要求计数器1的时钟脉冲频率为250kHz)。
分析:依据题目要求,需要利用8254进行定时1s掌握,定时到后,转变8255A的B口输出。
可
以利用中断的方式实现,8254定时到时向CPU申请中断,CPU相应中断后在中断程序中转变8255A的B口输出。由于题目要求8254的输入脉冲频率为250kHz,所以需要级联计数器1和
计数器0实现1s
定时(参考程序中利用计数器1进行20ms定时,计数器0进行50次计数,计数次数到时由OUT0向CPU申请中断)。8255A的B口掌握LED,可工作在方式0输出,A口未使用,为了选通实验板上的中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 铁路轨道工程施工招标合同三篇
- 许昌学院《造型基础》2021-2022学年第一学期期末试卷
- 激励员工的服务意识与敬业精神计划
- 铁矿石采购合同三篇
- 四年级数学(除数是两位数)计算题专项练习及答案
- 四年级数学(上)计算题专项练习及答案
- 施工环境保护和水土保持措施
- 食品采购合同模板三篇
- 雇佣劳动合同协议书示范三篇
- 丰富班级课程内容的构思计划
- 在线旅游平台旅游产品供应商管理预案
- 北师大版七年级上册生物教学设计 3.6.1 种子萌发形成幼苗
- 【课件】珍惜师生情谊+课件-2024-2025学年统编版道德与法治七年级上册
- 赋能或去能:人工智能对创造性人格的影响
- 2024年广东省中山市住房和城乡建设局招聘8人历年高频500题难、易错点模拟试题附带答案详解
- 矫形器装配工(三级)职业技能鉴定考试题库(含答案)
- 国家病案质控死亡病例自查表
- 市场调查与预测10套试卷期末考试题带答案
- 英语漫话天府新村智慧树知到答案2024年四川工商职业技术学院
- GB/Z 44306-2024颗粒质量一致性评价指南
- 第二单元位置(单元测试)-2024-2025学年五年级数学上册人教版
评论
0/150
提交评论