ImageVerifierCode 换一换
格式:DOCX , 页数:28 ,大小:37.04KB ,
资源ID:8395032      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8395032.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(《计算机硬件技术基础》实验答案程序.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、计算机硬件技术基础实验答案程序实验一:简单程序设计实验(1)编写一个 32 位无符号数除法的程序,要求将存放在 NUM1 中的 32 位无符号数与存放 在 NUM2 中的 16 位无符号数相除,结果存放在 NUM3 和 NUM4 中。程序流程图略。 参考源程序:DATA SEGMENTNUM1 DD 2A8B7654H NUM2 DW 5ABCH NUM3 DW ?NUM4 DW ? DATA ENDSCODE SEGMENTASSUME DS:DATA, CS:CODESTART: MOV AX,DATA ;数据段寄存器初始化MOV DS,AXMOV AX, WORD PTR NUM1MOV

2、 DX, WORD PTR NUM1+2DIV NUM2MOV NUM3,AX MOV NUM4,DXMOV AH,4CH ;正常返回DOS系统INT 21H CODE ENDSEND START(2)编写一个拆字程序。要求将存放在 ARY 单元的 2 位十六进制数 X1X2 拆为 X1 和 X2 两 部分,并以 0X1 和 0X2 的形式分别存入 ARY+1 和 ARY+2 单元中。程序流程图略。 参考源程序:DATA SEGMENT ARY DB 2AH,?,?DATA ENDSCODE SEGMENTASSUME DS:DATA, CS:CODE START: MOV AX,DATAMO

3、V DS,AXMOV SI,OFFSET ARY ;取ARY的偏移地址MOV AL,SI ;取16进制数至ALMOV BL,ALAND AL,0F0H ;取16进制数的高四位,即X1SHR AL,4MOV SI+1,AL ;存0X1MOV AL,BLAND AL,0FH ;取16进制数的低四位,即X2MOV SI+2,AL ;存0X2MOV AH,4CH INT 21HCODE ENDSEND START实验二:分支程序设计实验(1)编写一个字符比较程序,比较 3 个无符号字节数 A,B,C 的大小,并根据比较结果 对变量 K 赋值:如果 3 个数不相等,则 K=0;如果 3 个数中有两个相等

4、,则 K=1; 如果 3 个数都相等,则 K=2。程序流程图略。 参考源程序:DATA SEGMENT ;定义待比较数A、B、C,比较结果KA DB 20H B DB 20H C DB 20H K DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AX MOV AL,ACMP AL,B ;对A、B进行比较,不相等则转到COMP2JNE COMP2 ;相等则比较A、CCMP AL,CJNE K1 ;A、C不相等则K=1JMP K2 ;A、C相等则K=2COMP2: MOV BL,B CMP BL,CJ

5、E K1 ;对B、C进行比较,相等则K=1CMP AL,CJE K1 ;对A、C进行比较,相等则K=1K0: MOV K,0JMP EXIT K1: MOV K,1JMP EXIT K2: MOV K,2EXIT: MOV AH,4CHINT 21HCODE ENDSEND START(2)编写一个能实现下列表达式的程序:N = A + BA B设 A,B,C 为小于 128 的正整数。 A B + C程序流程图略。 参考源程序:DATA SEGMENTA BA DB 22H ;定义 A、B、C、N B DB 10HC DB 01H N DB ?DATA ENDSCODE SEGMENTASS

6、UME CS:CODE, DS:DATA START: MOV AX,DATAMOV DS,AXMOV AL, A CMP AL, BJG CALCUL ;A 小于或等于 B 则 N=A+BADD AL,B JMP EXITCALCUL: SUB AL, B ADC AL, CEXIT: MOV N, AL MOV AH,4CH INT 21HCODE ENDSEND START实验三 循环程序设计实验(1)将字符串STRN(以“$”结尾)中的每一个字符均加上偶校验位,并统计有多少个字符 因含有奇数个“1”而加上了校验位。统计结果存于N单元中。程序流程图略。 参考源程序:DATA SEGMEN

7、TSTRN DB What$ ;任意定义一个字串,以“$”结尾COUNT EQU $-STRN N DB ?BUF DB COUNT DUP(?) DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA START: MOV AX, DATAMOV DS, AX MOV AX, DATA MOV ES, AXLEA SI, STRN LEA DI, BUFMOV CX, COUNT MOV AL, 0LP1: MOV BL, SI ;逐个取字符进行判断AND BL, BL ;自己和自己做与运算JP NEXT ;根据 PF 标志位的变化进行跳转INC ALOR

8、BL, 80H NEXT: MOV DI, BLINC SI INC DI LOOP LP1MOV N, AL MOV AH, 4CHINT 21HCODE ENDSEND START(2)在 FIRST 开始的一片连续的数据区中存放着 100 个数据,编写一个程序,统计第 1个数据0之前的数据个数。 程序流程图略。 参考源程序:DATA SEGMENTFIRST DB 10H,24H,34H, 73H,20H,44H,03H,36H,41H ;任取 9 个数做演示COUNT EQU $-FIRST NUM DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE, DS

9、:DATA START: MOV AX,DATAMOV DS,AXMOV DL, 0 ;计数值初始为 0MOV CX,COUNTMOV BX, OFFSET FIRSTLP1: MOV AL, BX ;每次取一个数,与 0 比较CMP AL, 00H JNE NEXTJMP EXIT ;找到 0 则退出NEXT: INC DL ;没找到 0 则计数值加 1INC BX LOOP LP1EXIT: MOV NUM, DL MOV AH, 4CH INT 21HCODE ENDSEND START实验四:子程序设计实验将BUF开始的10个单元中两位十六进制数转换成ASCII码,并在屏幕上显示出来。

10、要求码型 转换通过子程序HEXASC实现,参数传送采用寄存器传送方式。程序流程图略。 参考源程序: (1)实现方法一:远过程调用 DATA SEGMENTBUF DB 10H,2FH,0D0H,0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF ;定义任意长度的一段 BUF DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?) ;设置足够深度的栈区STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AXMOV SI

11、,OFFSET BUF MOV CX,COUNTAGAIN: MOV AL,SI ;逐个取数MOV BL,ALSHR AL,4AND AL,0FH ;先对高字节部分转换(寄存器 AL 传参)CALL FAR PTR HEXASC ;调用子程序MOV DL,ALMOV AH,02H ;显示高字节部分对应的字符INT 21HMOV AL,BLAND AL,0FH ;再对低字节部分转换(寄存器 AL 传参)CALL FAR PTR HEXASC ;调用子程序MOV DL,ALMOV AH,02H ;显示低字节部分对应的字符INT 21HMOV DL,20HMOV AH,02H ;显示空格INT 21

12、HINC SILOOP AGAINMOV AH,4CH INT 21HCODE ENDSCODEB SEGMENT ASSUME CS:CODEBHEXASC PROC FARCMP AL,09H ;判断是不是数字JA HEXATOF ;是字母则转到 HEXATOFADD AL,30H ;是数字则对应到数字的 ASCII 码JMP ENDHEXHEXATOF:ADD AL,37H ;是字母则对应到字母的 ASCII 码ENDHEX: RET HEXASC ENDP CODEB ENDSEND START(2)实现方法二:近过程调用DATA SEGMENTBUF DB 10H,2FH,0D0H,

13、0FEH,33H,0F0H,20H,10H,3DH,0A2HCOUNT EQU $-BUF ;定义任意长度的一段 BUF DATA ENDSSTACK1 SEGMENT STACKDB 100 DUP(?) ;设置足够深度的栈区STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AXMOV SI,OFFSET BUF MOV CX,COUNTAGAIN: MOV AL,SI ;逐个取数MOV BL,ALSHR AL,4AND AL,0FH ;先对高字节部分做转换CALL HEXASCM

14、OV DL,AL ;显示高字节部分对应的字符MOV AH,02H INT 21HMOV AL,BLAND AL,0FH ;再对低字节部分做转换CALL HEXASCMOV DL,AL ;显示低字节部分对应的字符MOV AH,02H INT 21HMOV DL,20H ;显示空格MOV AH,02H INT 21HINC SI ;继续循环或退出LOOP AGAINMOV AH,4CH INT 21HHEXASC PROC NEAR CMP AL,09HJA HEXATOF ADD AL,30H JMP ENDHEXHEXATOF:ADD AL,37H ENDHEX: RETHEXASC ENDP

15、CODE ENDSEND START实验五:DOS 中断调用实验(1)如果从键盘上依次输入的是一个数字和一个字母,则输出“RIGHT”标记后结束程序, 否则输出标记“ERROR”后转向原出错处重做。试编程实现该功能。程序流程图略。 参考源程序:DATA SEGMENTMSG DB 0AH,0DH,RIGHT,0AH,0DH,$ WRN DB 0AH,0DH,ERROR,0AH,0DH,$DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA START: MOV AX,DATAMOV DS,AXAGAIN: MOV AH,01H ;等待用户输入 1 个字符并显

16、示INT 21HCMP AL,39H JA EMSG CMP AL,30HJB EMSG ;判断输入是否是数字,不是则报错MOV AH,01H ;等待用户输入 1 个字符并显示INT 21H CMP AL,A JB EMSGCMP AL,Z ;判断输入是否是大写字母,不是则继续JB EXIT ;判断是不是小写字母CMP AL,a JB EMSG CMP AL,zJB EXIT ;不是字母则报错,是字母则转到 EXITEMSG: LEA DX,WRN MOV AH,09H INT 21HJMP AGAINEXIT: MOV DX,OFFSET MSGMOV AH,09H ;显示“RIGHT”并退

17、出INT 21HMOV AH,4CHINT 21H CODE ENDSEND START(2)编写一程序分类统计字符个数:即接收键入的一串字符(字符个数不超过50个,该字 符串用回车作为结束),并按数字、字母和其它字符分类计数,然后将结果存入digit、letter 和other 3个存储单元中,并显示结果。程序流程图略。 参考源程序:DATA SEGMENTMSG1 DB 0AH, 0DH, Number of digit:,20H,$ MSG2 DB 0AH, 0DH, Number of letters:, 20H,$MSG3 DB 0AH, 0DH, Number of other c

18、haracters:, 20H, $ BUF DB 50DB 0DB 50 DUP(?) ;设置足够深的栈区DIGIT DB ? LETTER DB ? OTHER DB ?DATA ENDSSTACK1 SEGMENT STACK DB 100 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE,DS:DATA,SS:STACK1START: MOV AX,DATA MOV DS,AXMOV AH,0AH ;等待用户输入字符串并显示MOV DX,OFFSET BUF INT 21HMOV SI, OFFSET BUF MOV CL,SI+1MOV CH,0

19、0H MOV AL,00H MOV AH,00H MOV BH,00HAGAIN: MOV BL,SI+2 CMP BL,30HJB OTH ;ASCII 码小于 30H 则归类为“其它”CMP BL,3AHJB DIG ;ASCII 码大于等于 30H 小于 3AH 则归类为“数字” CMP BL,41HJB OTH ;ASCII 码大于等于 3AH 小于 41H 则归类为“其它” CMP BL,5BHJB LET ;ASCII 码大于等于 41H 小于 5BH 则归类为“字母” CMP BL,61HJB OTH ;ASCII 码大于等于 5BH 小于 61H 则归类为“其它” CMP BL

20、,7BHJB LET ;ASCII 码大于等于 61H 小于 7BH 则归类为“字母”OTH:INC AL;“其它”计数器加 1DIG:JMP ENDLP INC AH;“数字”计数器加 1LET:JMP ENDLP INC BH;“字母”计数器加 1ENDLP: INC SILOOP AGAIN ;继续循环MOV LETTER, BH MOV OTHER, ALMOV DX, OFFSET MSG1MOV AH,09H INT 21HMOV AL, DIGIT CALL DISP;显示“数字”有多少个MOV DX, OFFSET MSG2MOV AH,09H INT 21HMOV AL, L

21、ETTER CALL DISP;显示“字母”有多少个MOV DX, OFFSET MSG3MOV AH,09H INT 21HMOV AL, OTHER CALL DISP;显示“其它”有多少个MOV AH,4CH INT 21HDISPPROC NEAR;显示子程序MOV DIGIT, AH ;统计各类个数MOV AH,00H MOV DH,0AH DIV DHMOV CH,AH ADD AL, 30H MOV DL, AL MOV AH, 02H INT 21HADD CH,30H MOV DL, CH MOV AH, 02H INT 21HRET DISP ENDPCODE ENDSEN

22、D START实验六:扩展定时器/计数器接口实验(1)计数器0工作于方式3,编写初始化程序,观察其输出OUT0信号的波形。修改计数初 值,观察OUT0信号的变化情况。 硬件连接方法:8254计数器0的CLK0端接规则的脉冲输入(频率自选),OUT0接示波器的 正极;示波器负极接地。程序流程图略。 参考源程序:DATA SEGMENTDB 100 DUP(?) DATA ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA START: MOV AX,DATAMOV DS,AXMOV DX,20FH ;写入计数器0的控制字MOV AL,00010110B OUT DX,

23、ALMOV DX,20CH ;写入计数器0的计数初值MOV AL,05H OUT DX,ALMOV AH,4CH INT 21HCODE ENDSEND START(2)将计数器1和计数器0级联起来,二者均工作于方式3,编写初始化程序,观察OUT1 和OUT0信号的波形,说明二者的关系。修改计数初值,观察OUT0和OUT1输出波形的变 化情况。 硬件连接方法:8254计数器1的CLK1端接规则的脉冲输入(频率自选),OUT1接8254计数 器0的CLK0,计数器0的输出OUT0接示波器正极;示波器负极接地。程序流程图略。 参考源程序:DATA SEGMENT DB 100 DUP(?)DATA

24、 ENDS CODE SEGMENTASSUME CS:CODE,DS:DATA START: MOV AX,DATAMOV DS,AXMOV DX,20FHMOV AL,00010110B ;写入计数器0的控制字OUT DX,ALMOV DX,20CH ;写入计数器0的计数初值MOV AL,05H OUT DX,ALMOV DX,20FHMOV AL,01010110B ;写入计数器1的控制字OUT DX,ALMOV DX,20DH ;写入计数器1的计数初值MOV AL,02H OUT DX,ALMOV AH,4CH INT 21HCODE ENDSEND START实验七:并行输入/输出接

25、口 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 输出,其它端口未使 用,无

26、需考虑。因此,8255A 的方式控制字为:10000000B(80H)。硬件连接方法:8255A 的 B 口 PB0PB7 分别连接 L1L8。 程序流程图略。参考源程序:.486DATA SEGMENTPORTA DW 208H ;8255A端口A地址 PORTB DW 209H ;8255A端口B地址 PORTC DW 20AH ;8255A端口C地址 PORT_CTR DW 20BH ;8255A控制端口地址DATA ENDSSTACK1 SEGMENT STACK DB 100 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA,

27、SS:STACK1START: MOV AX,DATA MOV DS,AXMOV DX, PORT_CTR MOV AL, 10000000B;8255A初始化;控制字OUT DX, ALMOV DX, PORTB MOV AL, 00H OUT DX, AL;8255A端口B清零,LED初始化(全灭)LP0:MOV BL, 01010101B MOV AL, BLOUT DX, AL CALL DELAYNOT ALMOV BL, ALMOV AH, 01H ;调用BIOS的16H功能判断键盘是否有输入INT 16H JNZ EXIT JMP LP0EXIT: MOV AH, 4CH INT

28、 21HDELAY PROC NEAR ;延时子程序(可通过修改NOP指令数量改变延时时间) MOV ECX, 0FFFFFFFHLP2: NOPLOOPD LP2RET DELAY ENDPCODE ENDSEND START(2)利用 8255A 的 A 口读入 8 个开关 K1K8 的状态,当只有 K1 合上时,L1L8 显示00000001B;当只有 K1 和 K2 合上时,L1L8 显示 00000010B;当只有 K1,K2 和 K3 合上 时,L1L8 显示 00000011B;当只有 K1,K2,K3 和 K4 合上时,L1L8 显示 00000100B; 直到所有开关合上时,

29、L1L8 显示 00001000B,并结束程序的运行。发光二极管的状态通 过 8255A 的 B 口进行控制。分析:按照题目要求,可以通过查询的方式读取 8255A 的 B 口状态,并根据查询的结果给 A 口送出相应数据,A 口工作在方式 0 的输入状态,B 口工作在方式 0 输出状态,C 口不需要 考虑,所以 8255A 的方式控制字为:10010000B)硬件连接方法:(1)8255A 的 A 口 PA0PA7 对应连接 K1K8;(2)8255A 的 B 口 PB0PB7 对应连接 L1L8; 源代码:DATA SEGMENTLIST DB 01H, 03H, 07H, 0FH, 1FH

30、, 3FH, 7FH, 0FFH DATA ENDSSTACK1 SEGMENT STACK DB 100 DUP(?)STACK1 ENDSCODE SEGMENTASSUME CS:CODE, DS:DATA, SS:STACK1START: MOV AX, DATAMOV DS, AXMOV DX, 20BH ;8255A初始化MOV AL, 10010000B OUT DX, ALMOV DX, 209H ;8255A的B口清零,LED初始化(全灭) MOV AL, 00HOUT DX, ALL0: MOV DX, 208H ;读8255A的A口,获得开关状态IN AL, DXMOV BL, 00H MOV CX, 8MOV SI, OFFSET LIST L1: INC BLCMP AL, SI JZ FIND INC SILOOP L1JMP L0FIND

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

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