《计算机硬件技术基础》实验答案程序.docx

上传人:b****5 文档编号:6074645 上传时间:2023-01-03 格式:DOCX 页数:51 大小:32.32KB
下载 相关 举报
《计算机硬件技术基础》实验答案程序.docx_第1页
第1页 / 共51页
《计算机硬件技术基础》实验答案程序.docx_第2页
第2页 / 共51页
《计算机硬件技术基础》实验答案程序.docx_第3页
第3页 / 共51页
《计算机硬件技术基础》实验答案程序.docx_第4页
第4页 / 共51页
《计算机硬件技术基础》实验答案程序.docx_第5页
第5页 / 共51页
点击查看更多>>
下载资源
资源描述

《计算机硬件技术基础》实验答案程序.docx

《《计算机硬件技术基础》实验答案程序.docx》由会员分享,可在线阅读,更多相关《《计算机硬件技术基础》实验答案程序.docx(51页珍藏版)》请在冰豆网上搜索。

《计算机硬件技术基础》实验答案程序.docx

《计算机硬件技术基础》实验答案程序

 

实验一:

简单程序设计实验

 

(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。

程序流程图略。

参考源程序:

DATA

SEGMENT

;定义待比较数A、B、C,比较结果K

ADB20H

BDB20H

CDB20H

KDB?

DATA

ENDS

CODE

SEGMENT

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页

 

INT21H

 

CODEENDS

ENDSTART

 

(2)编写一个能实现下列表达式的程序:

?

A+BA≤B

N=?

设A,B,C为小于128的正整数。

?

A-B+CA>B

程序流程图略。

参考源程序:

DATASEGMENT

ADB22H;定义A、B、C、N

BDB10H

CDB01H

NDB?

DATAENDS

 

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

 

第4页共31页

 

实验三循环程序设计实验

 

(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符因含有奇数个“1而”加上了校验位。

统计结果存于N单元中。

程序流程图略。

参考源程序:

DATASEGMENT

STRNDB'What$';任意定义一个字串,以“$”结尾

COUNTEQU$-STRN

NDB?

BUFDBCOUNTDUP(?

DATAENDS

 

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVAX,DATA

MOVES,AX

 

LEASI,STRN

LEADI,BUF

MOVCX,COUNT

MOVAL,0

 

LP1:

MOVBL,[SI];逐个取字符进行判断

ANDBL,BL;自己和自己做与运算

JPNEXT

;根据PF标志位的变化进行跳转

INCAL

ORBL,80H

NEXT:

MOV[DI],BL

INCSI

INCDI

LOOPLP1

 

MOVN,AL

 

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

 

(2)在FIRST开始的一片连续的数据区中存放着100个数据,编写一个程序,统计第1

第5页共31页

 

个数据,0?

之前的数据个数。

程序流程图略。

参考源程

序:

DATASEGMENT

FIRSTDB10H,24H,34H,73H,20H,44H,03H,36H,41H;任取9个数做演示

COUNTEQU$-FIRST

NUMDB?

DATAENDS

 

CODE

SEGMENT

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则计数值加1

INCBX

LOOPLP1

EXIT:

MOVNUM,DL

MOVAH,4CH

INT21H

CODE

ENDS

ENDSTART

 

第6页共31页

 

实验四:

子程序设计实验

 

将BUF开始的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。

要求码型

转换通过子程序HEXASC实现,参数传送采用寄存器传送方式。

程序流程图略。

参考源程序:

(1)实现方法一:

远过程调用

DATASEGMENT

BUFDB10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2H

COUNTEQU$-BUF;定义任意长度的一段BUFDATAENDS

 

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

 

第7页共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;定义任意长度的一段BUFDATAENDS

 

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

 

第8页共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

 

第9页共31页

 

实验五:

DOS中断调用实验

 

(1)如果从键盘上依次输入的是一个数字和一个字母,则输出

“RIGHT”标记后结束程序,

否则输出标记“ERROR”后转向原出错处重做。

试编程实现该功能。

程序流程图略。

参考源程序:

DATA

SEGMENT

MSGDB0AH,0DH,'RIGHT',0AH,0DH,'$'

WRNDB0AH,0DH,'ERROR',0AH,0DH,'$'

DATA

ENDS

CODE

SEGMENT

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

 

第10页共31页

 

INT21H

CODE

ENDS

ENDSTART

(2)编写一程序分类统计字符个数:

即接收键入的一串字符(字符个数不超过

50个,该字

符串用回车作为结束),并按数字、字母和其它字符分类计数,然后将结果存入

digit、letter

和other3个存储单元中,并显示结果。

程序流程图略。

参考源程序:

DATA

SEGMENT

MSG1DB0AH,0DH,'Numberofdigit:

',20H,'$'

MSG2DB0AH,0DH,'Numberofletters:

',20H,'$'

MSG3DB0AH,0DH,'Numberofothercharacters:

',20H,'$'

BUFDB50

DB0

DB50DUP(?

;设置足够深的栈区

DIGITDB?

LETTERDB?

OTHERDB?

DATA

ENDS

STACK1

SEGMENTSTACK

DB100DUP(?

STACK1

ENDS

CODE

SEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

MOVAH,0AH

;等待用户输入字符串并显示

MOVDX,OFFSETBUF

INT21H

MOVSI,OFFSETBUF

MOVCL,[SI+1]

MOV

CH,00H

MOV

AL,00H

MOV

AH,00H

MOVBH,00H

AGAIN:

MOVBL,[SI+2]

CMPBL,30H

JBOTH

;ASCII码小于30H则归类为“其它”

CMPBL,3AH

 

第11页共31页

 

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

;“其它”计数器加1

JMPENDLP

DIG:

INCAH

;“数字”计数器加1

JMPENDLP

LET:

INCBH

;“字母”计数器加1

ENDLP:

INCSI

LOOPAGAIN

;继续循环

MOVDIGIT,AH

;统计各类个数

MOVLETTER,BH

MOVOTHER,AL

MOVDX,OFFSETMSG1

;显示“数字”有多少个

MOVAH,09H

INT21H

MOVAL,DIGIT

CALLDISP

MOVDX,OFFSETMSG2

;显示“字母”有多少个

MOVAH,09H

INT21H

MOVAL,LETTER

CALLDISP

MOVDX,OFFSETMSG3

;显示“其它”有多少个

MOVAH,09H

INT21H

MOVAL,OTHER

CALLDISP

MOVAH,4CH

INT21H

DISP

PROCNEAR

;显示子程序

 

第12页共31页

 

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

 

第13页共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

 

第14页共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

CODE

ENDS

ENDSTART

 

第15页共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)时,发光

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 解决方案

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1