版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
微机原理及接口第四章习题答案微机原理及接口第四章习题答案微机原理及接口第四章习题答案微机原理及接口第四章习题答案编制仅供参考审核批准生效日期地址:电话:传真:邮编:“微机系统原理与接口技术”第四章习题解答判断以下说法是否正确,如有错,请说明原因并改正。(1)伪指令在汇编过程中不会产生二进制代码。(2)宏和过程的相同之处是都可用于简化源程序书写、精简目标代码。(3)在计算机中,高级语言通常需要转换为汇编语言后才能执行。(4)汇编语言程序上机一般包括编辑、汇编、链接和调试几个步骤。答:(1)正确。(2)错误。宏不能精简目标代码。(3)错误。高级语言程序经编译或解释后直接转换为目标代码。(4)正确。已知数据和符号定义A1 DB A2 DB 8 K1 EQU 100判断下列指令的正误,并说明错误指令的原因。(1)MOV K1,AX(2)MOV A2,AH(3)MOV BX,K1 MOV [BX],DX(4)CMP A1,A2(5)K1 EQU 200答:(1)错误。K1是符号常数,在此处相当于立即数100,故不能做目的操作数。(2)正确。(3)正确。(4)错误。A1、A2都是字节变量,相当于两个存储器单元,故不能同时出现在一条指令中直接进行比较。(5)错误。用EQU定义的符号不能重新赋值,除非已用PURGE解除了原值。若数据段中有定义 NUM1 EQU 23H NUM2 DW 0则指令MOV NUM2,NUM1的源、目操作数的寻址方式以及指令执行后NUM2+1单元的内容分别是什么答:指令MOVNUM2,NUM1的源操作数使用立即数寻址,目的操作数使用直接寻址。指令执行后NUM2+1单元的内容是0。设DS=6000H,BX=8432H,SS=5000H,SP=3258H,内存69632H~69635H单元的内容依次是00H、11H、22H、33H。4字节指令CALLDWORDPTR[BX+1200H]本身位于2000H:3250H处的双字单元中。当8086执行该指令后转移至子程序入口时,CS、IP、SS、SP各寄存器以及栈顶2个字单元的内容分别是多少答:执行结果为CS=3322H,IP=1100H,SS=5000H,SP=3254H,栈顶的两个字即断点地址,为2000H:3254H。已知某数据段从物理地址03000H处开始,定义如下: DSEG SEGMENT ORG 2000H A1 DD 2DUP(7,1,) A2 DB 10DUP(0,4,3DUP(2),5)……09HARA1……09HARA1(0006H)00H11H00HARA2(000AH)‘4‘60FFHARA3(0010H)0FFH0FFH0FFH0FFH0FFHARA4(0016H)05H05H05H05H‘$’05H05H05H05H‘$’9AHVAR2(0024H)56H41H(‘A’)42H(‘B’)题4-7图 A3 DW 100DUP() DSEG ENDS请分别用分析运算符SEG、OFFSET、LENGTH、SIZE、TYPE求出A1、A2、A3的段基址、偏移量、类型及它们的LENGTH、SIZE。答:(SEGA1)=0300H,(OFFSETA1)=2000H,(TYPEA1)=4,(LENGTHA1)=2,(SIZEA1)=2×4=8;(SEGA2)=0300H,(OFFSETA2)=2018H,(TYPEA2)=1,(LENGTHA2)=10,(SIZEA2)=10×1=60;(SEGA3)=0300H,(OFFSETA3)=2054H,(TYPEA3)=2,(LENGTHA3)=100,(SIZEA3)=100×2=200已知符号定义语句如下: ALPHA EQU 100 BETA EQU 25 GAMMA EQU 2分别求下列各表达式的值。(1)ALPHA*4GTBETA=100*4GT25=0FFFFH(2)ALPHAMODGAMMA+BETA=100MOD2+25=25(3)(BETA/3)LE5=(25/3)LE5=0(4)ALPHAANDBETA=100AND25=64H&19H=0(5)GAMMAXOR(BETAEQ25)=2(25EQ25) =0FFFDH已知数据段定义如下:DSEGSEGMENT ORG 6 ARA1 DD 110009H ARA2 DW 2DUP(),‘64’CONT1 EQU $-ARA2COUT2 EQU ARA2-ARA1ARA3 DB CONT1DUP(0FFH)ARA4 DB 2DUP(,CONT2DUP(5),’$’)ORG $+2VAR2 DW 569AH DB ‘AB’DSEG ENDS用示意图说明该数据段的存贮单元分配情况。答:有关存储单元的内容如右图所示。下列程序是否有错如有错,请改正。该程序完成什么功能。 DATA SEGMENT INBUF DW 100DUP() OUTBUF DW 100DUP() DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA MAIN PROC FAR MOV AX,DATA MOV DS,AX INIT: MOV SI,OFFSETINBUF LEA DI,OUTBUF MOV CX,100 REP MOVSB MAIN ENDP CODE ENDS END MAIN答:改正之后的源程序清单如下(下划波浪线的语句是原来没有的或有错之处): DATA SEGMENT INBUF DW 100DUP() OUTBUF DW 100DUP() DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA ;原ASSUME语句未说明ES MAIN PROC FAR PUSH DS ;补充的三条指令为主程序返回提供正确的地址 XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;MOVS指令以ES:DI为目的串指针,故应对ES赋值 INIT: MOV SI,OFFSETINBUF LEA DI,OUTBUF MOV CX,100 CLD ;从首址开始传送,应使DF=0 REPMOVSW ;应传送的是100个字而非字节 RET ;程序结束,返回DOS MAIN ENDP CODE ENDS END MAIN该程序完成的功能是:将INBUF表内的10个字数据复制到以OUTPUT开始的连续的内存单元中。读下面程序,在其中的空处添上适当内容。该程序完成了什么功能程序运行后,变量RS的值是多少 DATA SEGMENT BUF DB -13,24,5,-62,77,20,-7,145,0 CNT DB $-BUF RS DB 0 DATA ENDSSTACK SEGMENT PARASTACK‘STACK’ DB 256DUP() STACK ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE START PROC FARPUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX LEA BX,BUF MOV CH,0 MOV CL, LP: MOV AL,[BX] TEST AL,80H JE CONT INC RS CONT:INC BX LOOP LP RET START ENDP CODE ENDS END START答:程序空处可填CNT,字节变量RS的最后结果是04H。该程序实现的功能是:统计数据段中以BUF为首址的带符号字节数据表中负数的个数,CNT为表中所有数据的个数,即表的长度。需要注意的是:十进制数据“145”在以二进制带符号字节数据形式存放时相当于“-111”。编写一个完整的源程序,将数据35、-27、-13、6、-47、52、9、-3中的正数放入以BUFFER为首址的数据缓冲区中。答:一种可能的程序如下实现:DATA SEGMENT BLOCK DB 35,-27,-13,6,-47,52,9,-3 COUNT EQU $-BLOCK BUFFER DB COUNT DUP() DATA ENDS STACK SEGMENTPARASTACK‘STACK’ DW 40 DUP() STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK BEGIN:MOV AX,DATA MOV DS,AX MOV ES,AX ;需用STOS串操作指令 MOV CX,COUNT LEA SI,BLOCK ;源数据区指针 LEA DI,BUFFER ;正数存放区指针 CLD ;自动增量 AGAIN:LODSB ;取源数据,并修改SI TEST AL,80H ;取符号位,不影响AL JS GO ;符号位=1,是负数,不存 STOSB ;存正数并修改DI GO: LOOP AGAIN MOV AH,4CH ;退出循环,返回DOS INT 21H CODE ENDS END BEGIN已知有一个长100个字的数据块,存放在以3DA0H:1000H开始的存储区域内。试编写一个完整的汇编语言程序,将该数据块复制到以3DA0H:1008H开始的存储区内。答:一种可能的程序如下实现:DATA SEGMENTAT3DA0H ORG 1000H BLOCK DW 104DUP() DATA ENDS SSEG SEGMENTPARASTACK‘SSEG’ DB 100DUP() SSEG ENDS CODE SEGMENT ASSUME CS:CODE,SS:SSEG,DS:DATA,ES:DATA MAIN PROC FAR PUSH DS MOV AX,0 PUSH AX MOV AX,SEGBLOCK MOV DS,AX MOV ES,AX MOV CX,200 ;重复次数 LEA SI,BLOCK ADD SI,199 ;SI=10C7H MOV DI,SIADD DI,8 ;DI=10CFH STD ;自动减量 REP MOVSB RET MAIN ENDP CODE ENDS END MAIN简析:由题意可知,源数据区(占用地址3DA0:1000H~3DA0:10C7H,共200个字节)与目标数据区(占用地址3DA0:1008H~3DA0:10CFH,共200个字节)是重叠的。若从首址开始增量传送(DF=0),将破坏1008H以后的源数据,所以必须从末址向首址减量传送(DF=1)。数据段初始化时,有以下几点需注意:段基址规定为3DA0H,故应在段定义伪指令SEGMENT后加上AT语句;源数据区首址的偏移量规定为1000H,故应使用ORG语句指明;对源、目标数据区进行定义时,应注意目标数据区首址的偏移量是1008H。如果定义为: ORG 1000H SOUR DW 100DUP() ;源数据区 DEST DW 100DUP() ;目标数据区则目标数据区首址的偏移量实际上是10C8H,不合题意。可将它们统一定义为足够长度(至少104字或208字节)的变量,如参考程序所示。指针初始化时,可以将SI、DI分别置为10C7H、10CFH,且CX=200,即进行字节的传送,使用MOVSB;亦可将SI、DI分别置为10C6H、10CEH,且CX=100,即进行字的传送,相应使用MOVSW。从内存单元BUF开始的缓冲区中有7个8位无符号数,依次为13H、0D8H、92H、2AH、66H、0E0H、3FH。编程找出它们的中间值并放入RES单元,且将结果以“(RES)=”的格式显示在屏幕上。答:一种可能的程序如下实现:DATA SEGMENT BUF DB 13H,0D8H,92H,2AH,66H,0E0H,3FH RES DB ;中间数的存放单元 STR DB ‘(RES)=’STR1 DB ,,‘$’ ;结果字符串 DATA ENDS SSEG SEGMENTPARASTACK‘SSEG’ DB 100DUP() SSEG ENDS CODE SEGMENT ASSUME CS:CODE,SS:SSEG,DS:DATA,ES:DATA MAIN PROC FAR ;主程序 PUSH DS XOR AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV ES,AX ;有STOS指令,需用ES MOV CX,6 ;外循环次数,比6次 AGN: MOV SI,OFFSETBUF MOV DI,SI INC DI ;SI、DI指向相邻2数 MOV DX,6 ;内循环次数,比6次 AGN1: MOV AL,[SI] CMP AL,[DI] ;两个无符号数相比较 JB UNCH ;小于则转,不互换 EXCH: XCHG AL,[DI] ;前1单元较大,则互换 MOV [SI],AL ;大数放在后面 UNCH: INC SI ;修改指针,指向下一个数 INC DI DEC DX JNZ AGN1 ;未处理完,继续内循环 LOOP AGN ;外循环 DONE: MOV AL,[SI-3] ;排序完成,取中间数 MOV RES,AL AND AL,0F0H ;分离高半字节 MOV CL,4 SHR AL,CL CALL BATR ;调子程序,将AL值转换为ASCII码 LEA DI,STR1 ;DI指向结果单元 CLD STOSB ;存放转换结果 MOV AL,RES AND AL,0FH ;分离并转换低半字节 CALL BATR STOSB LEA DX,STR ;显示整个字符串 MOV AH,09H INT 21H RET MAIN ENDP ;主程序MAIN结束 ;子程序BATR,实现16进制数到ASCII码的转换 BATR PROC NEAR CMP AL,10 ;入口参数为AL JB NUM ;是数字,则转NUM ADD AL,’A’-10-’0’ ;字母 NUM: ADD AL,’0’ RET BATR ENDP ;子程序结束 CODE ENDS END MAIN简析:本例的基本思路是:先把7个无符号数按大小排序,排序完成之后取位于中间的一个数即为中间值。然后将该16进制数转换为两个对应的ASCII码,再与要求的格式字符一起输出送显即可。数据排序可以是从大到小、或从小到大排列,本参考程序完成从小到大排序,由一个双重循环结构实现。内循环完成一个数与其它数之间的一一比较,并使每次比较所得的小数置于低地址单元。外循环实现所有数之间的两两相较。共7个数据,故内、外循环中的比较次数均为6次。编程时需注意:无符号数比较大小应使用JA、JB、JAE、JBE指令,本例完成从小到大的排列,故用JB控制转移到UNCH;若要从大到小排列,则用JA代替JB即可。对两个循环体进行初始化时,需仔细考虑指针和循环控制寄存器的初值。在数据段的定义中,分别定义STR、STR1两个变量名字,是为了便于在STR1处存放转换结果;显示时使DX直接指向STR,以STR1末尾的“$”为结束符。中间值找出之后,应把高、低半字节相分离,并分别转换为各所对应的ASCII码。设某测试系统中,1号端口为测试口,所得数据是0~9之间的十进制整数;2号端口为显示口,对应于数字0~9的LED七段共阴显示码依次为:3FH、06H、5BH、4FH、66H、6DH、3DH、07H、7FH、6FH。编写一段查表送显的程序,要求:先从测试口读入一个数据,再查表将相应的显示码从显示口送出,如此反复进行直至读入数据“0FFH”为止。答:一种可能的程序如下实现:DATA SEGMENT TAB DB 3FH,06H,5BH,4FH,66HDB 6DH,3DH,07H,7FH,6FH ;0~9的七段码 DATA ENDS STACK SEGMENTPARASTACK‘STACK’ DW 50 DUP() STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA START: MOV AX,DATA MOV DS,AX LEA BX,TAB ;BX指向表首址 NEXT: IN AL,1 ;从测试口输入 CMP AL,0FFH JE STOP ;是0FFH,结束 XLAT TAB ;不是0FFH,查表转换 OUT 2,AL ;向显示口输出七段码 JMP NEXT ;继续测试 STOP: MOV AH,4CH INT 21H CODE ENDS END START编程实现以下操作:从键盘输入4个数字,分别作为2个10~99之间的十进制数。求它们的和,并把结果以三位十进制数的形式显示在屏幕上。要求:输入回显的两个加数与送显的和之间有适当的分隔,以示区别。格式可自行拟定。答:一种可能的程序如下实现:DATA SEGMENT NUM1 DB , ;加数1,高位在前,以非组合BCD码存放 NUM2 DB , ;加数2,高位在前,以非组合BCD码存放 SUM DB ,,,‘$’ ;存放结果的ASCII码,以‘$’为结束符 DATA ENDS STACK SEGMENTPARASTACK‘STACK’ DW 50DUP()
STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA FIRST: MOV AX,SEGNUM1 MOV DS,AX MOV ES,AX ;有STOS指令,需用ES CLD ;自动增量,先输入高位 MOV CX,2 LEA DI,NUM1 ;输入加数1 IN1: MOV AH,1 ;DOS功能调用,单字符输入 INT 21H AND AL,0FH ;ASCII码转换为非组合BCD码 STOSB LOOP IN1 MOV DL,‘+’ ;输出加号,以分隔2个加数 MOV AH,2 INT 21H MOV CX,2 LEA DI,NUM2 ;输入加数2 IN2: MOV AH,01H INT 21H AND AL,0FH STOSB LOOP IN2 MOV DL,‘=’ ;输出等号,分隔加数与结果 MOV AH,02H INT 21H LEA SI,NUM1 INC SI ;SI指向加数1的低位 LEA BX,NUM2 INC BX ;BX指向加数2的低位 LEA DI,SUM ADD DI,2 ;DI指向结果的末单元 STD ;自动减量,由低向高相加 MOV CX,2 ;相加次数 CLC ;清进位,准备用ADC AD: LODSB ;取加数1的低位,修改SI ADC AL,[BX] ;2数相加,带进位 AAA ;未组合BCD码的十进制调整PUSHF ADD AL,30H ;BCD码向ASCII码转换POPF;因未组合BCD码的高4位为0,故加30H不会影响CF STOSB ;存和,并修改DI。CF不变DEC BX ;指向加数2的高位。CF不变 LOOP AD ADC BYTEPTR[DI],30H ;BCD码向ASCII码转换;高位相加若产生进位,则使SUM单元加1(表示百位),故使用ADC指令 LEA DX,SUM ;输出结果 MOV AH,09H INT 21H MOV AH,4CH ;返回DOS INT 21HCODE ENDS END FIRST简析:按照本参考程序,屏幕显示格式如“73+46=119”的样式。基本思路是:首先调用DOS功能,从键盘输入2个0~9之间的数字(字符串输入的AH调用号为10,单个字符输入的AH调用号为1),然后向CRT输出“+”(单个字符输出的AH调用号为2);再由键盘输入2个数,然后输出“=”。将两次输入的数分别作为2个加数相加,得到的和经十进制调整后,向CRT输出(字符串输出的AH调用号为9)。以下几处需进行码制转换:调用单个字符输入功能后,AL中的出口参数为各数字键所对应的ASCII码,故应转换为BCD码才能进行加运算。转换方式:与0FH相与,所得为未组合BCD码。2个未组合BCD码相加,和应该用AAA指令进行十进制调整,调整结果反映在累加器和标志位CF上。加法完成之后,应将结果逐位转换为ASCII码,才可以向CRT输出。做加法运算时还应注意:加数输入之后,先取两个低位相加,再取高位相加(同时加上低位相加产生的进位),需仔细检查指针。若用循环结构完成加运算,则进入循环之前必须清CF,方可在循环体中使用ADC指令。有一个长度不超过100字节的字符串,以回车符结尾。编程统计其中非空格的字符个数,并将统计结果以自拟格式显示在CRT上。答:一种可能的程序如下实现:DATA SEGMENT STR DB ‘It’’safineday,isn’’tit’,0DH,‘$’ ;依题意以0DH为结束符。加上“$”便于显示整个字符串 COUNT EQU $-STR-2 ;串长中不包括结束符和“$”符号 NUM DB 0 ;置统计结果初值为0 STR1 DB ‘Thenumberofnon-spacecharactorsis’,‘$’ DATA ENDS STACK SEGMENTPARASTACK‘STACK’ DB 100DUP() STACK ENDS CODE SEGMENT ASSUME CS:CODE,SS:STACK,DS:DATA,ES:DATA START: MOV AX,DATA MOV DS,AX MOV ES,AX ;有SCAS指令,需用ES LEA DI,STR CLD MOV AL,20H ;关键字符(空格) MOV CX,COUNT NEXT: SCASB JE SKIP ;是空格,跳过下一句 INC NUM ;非空格字符,NUM加1 SKIP: LOOP NEXT LEA DX,STR ;显示原字符串 MOV AH,09H INT 21H MOV DL,0AH ;显示换行符,以便显示另一字串 MOV AH,2 INT 21H LEA DX,STR1 ;显示另一个字符串 MOV AH,9 INT 21H ;将16进制的统计结果转换为十进制数,再转换为两个ASCII码输出 MOV AL,NUM MOV AH,0 ;AX中为待转换16进制数 MOV BL,10 DIV BL ;AX/BL ;商(十位)在AL中,余数(个位)在AH中,均为未组合BCD码 PUSH AX ;入栈保护 OR AL,30H ;将十位数转换为ASCII码 MOV DL,AL ;送CRT显示 MOV AH,2 INT 21H POP AX ;恢复除法运算
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 主要产品采购合同
- 家具购销合同范本经典
- 工程合同进度与质量要求
- 独家招生代理合作协议
- 股东出资协议书参考格式
- 二手推土机买卖协议
- 2024版劳务派遣协议书
- 按份共同保证书范本
- 门面转让合同范例
- 工程运营居间合同范本
- 《Vue 3基础入门》课件 第一章 vue 3简介
- 【7道人教版期中】安徽省合肥市琥珀中学+2023-2024学年七年级上学期11月期中道德与法治试题(含解析)
- 中国移动自智网络白皮书(2024) 强化自智网络价值引领加速迈进L4级新阶段
- GB/T 31486-2024电动汽车用动力蓄电池电性能要求及试验方法
- 2024年卫生系统招聘考试-卫生系统招聘考试(临床医学专业知识)考试近5年真题集锦(频考类试题)带答案
- 2024年安徽省滁州市琅琊区城市管理行政执法局招聘15人历年高频难、易错点500题模拟试题附带答案详解
- 插画风浙江大学浙大介绍大学介绍
- 《义务教育数学课程标准(2022年版)》测试题+答案
- 2024年网上大学智能云服务交付工程师认证考试题库800题(含答案)
- 数据安全重要数据风险评估报告
- 特种设备使用单位日管控、周排查、月调度示范表
评论
0/150
提交评论