《计算机硬件技术基础》实验参考程序2_第1页
《计算机硬件技术基础》实验参考程序2_第2页
《计算机硬件技术基础》实验参考程序2_第3页
《计算机硬件技术基础》实验参考程序2_第4页
《计算机硬件技术基础》实验参考程序2_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论