微机原理及应用教材课后习题及答案_第1页
微机原理及应用教材课后习题及答案_第2页
微机原理及应用教材课后习题及答案_第3页
微机原理及应用教材课后习题及答案_第4页
微机原理及应用教材课后习题及答案_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、微机原理及应用习题答案第一章1.11 请完成下列数制转换:(1) 将174.66D转换为对应的二进制和十六进制形式。(2) 将100011101011.01011B转换为对应的十进制和十六进制形式。(3) 将F18A6.6H转换为对应的二进制和十进制形式。答:174.66D=10101110.1010B=AE.AH100011101011.01011B=2283.34375D=8EB.58HF18A6.6H=989350.375D1.12 请写出与数据+37和-37对应的8位机器数原码、反码和补码,并分别用二进制和十六进制表不出来。答:-37D=(10100101B)原=(11011010B)

2、反=(11011011B)补1.13 8位机器数46H,若作为无符号数和补码有符号数,其对应的真值各是什么?若作为BCD码和ASCII码,其对应的又是什么?答:无符号数46H=70,补码46H=+70BCD码46H=46,ASCII码46H=“F”第二章2.5 什么是8088中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?1MB最多能分成多少个逻辑段?请将如下逻辑地址用物理地址表达:(1)FFFFH:0H(2)40H:17H(3)2000H:4500H(4)B821H:4567H答:FFFFH:0H=FFFF0H40H:17H=00417H2000H:4500H=24500H(4)B821

3、H:4567H=BC777H2.8已知DS=2000H,BX=0100H,SI=0002,存储单元20100H20103H依次存放12H,34H,56H,78H,21200H21203H依次存放2AH,4CH,87H,65H,说明下列每条指令执行完后AX寄存器的内容以及源操作数的寻址方式?答:AX=1200H,立即数寻址;AX=0100H,寄存器寻址;AX=4C2AH,直接寻址;(4)AX=3412H,寄存器间接寻址;AX=4C2AH,寄存器相对寻址;(6)AX=7865H,基址变址寻址;AX=65B7H,基址变址相对寻址。2.9说明下面各条指令的具体错误原因:(1)movcx,dl(2)mo

4、vip,ax(3)moves,1234h(4)moves,ds(5)moval,300(6)movsp,ax(7)movax,bx+di(8)mov20h,ah答:操作数类型不同;不能手工修改IP;不能将立即数直接MOV到段寄存器;不能在段寄存器之间直接MOV数据;300大于AL所能存放的数据的范围;寄存器间接寻址只能用BX/BP/SI/DI之一;MOVAX,BX+DI;目的操作数不能是立即数。2.10 已知数字09对应的格雷码依次为:18H,34H,05H,06H,09H,0AH,0CH,11H,12H,14H,它存在于以table为首地址(设为200H)的连续区域中。请为如下程序段的每条指

5、令加上注释,说明每条指令的功能和执行结果。leabx,tablemoval,8xlat答:leabx,table;bx=0200hmoval,8;al=08hxlat;al=12h2.11 给出下列各条指令执行后的AL值,以及CF,ZF,SF,OF和PF的状态:moval,89haddal,aladdal,9dhcmpal,0bchsubal,aldecalincal答:al=89hal=12h,CF=1,ZF=0,SF=0,OF=1,PF=1,AF=1al=afh,CF=0,ZF=0,SF=1,OF=0,PF=1,AF=0(4)al=afh,CF=1,ZF=0,SF=1,OF=1,PF=1,

6、AF=0al=00h,CF=0,ZF=1,SF=0,OF=0,PF=1,AF=0(6)al=ffh,CF=0,ZF=0,SF=1,OF=0,PF=1,AF=1al=00h,CF=0,ZF=1,SF=0,OF=0,PF=1,AF=12.12请分别用一条汇编语言指令完成如下功能:(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加并把结果送到AL中。用BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内容相加,并把结果送回存储器中。(4)用位移量为0520H的直接寻址方式把存储器中的一

7、个字与数3412H相加,并把结果送回该存储单元中。(5)把数0A0H与AL寄存器的内容相加,并把结果送回AL中。答:adddx,bx;addal,bx+si;addbx+00b2h,cx(4)addwordptr0520h,3412haddal,0a0h2.13 设X,Y,Z,V均为16位带符号数,分别装在X,Y,Z,V存储器单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。movax,ximulymovcx,axmoxbx,dxmovax,zcwdaddcx,axadcbx,dxsubcx,540abbbx,0movax,vcwdsubax,cxabbdx,bxidivx答:

8、(V(X*Y+Z540)/X2.14 给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。movax,1470handax,axorax,axxorax,axnotaxtestax,0f0f0h答:ax=1470hax=1470h,CF=0,ZF=0,SF=0,OF=0,PF=0ax=1470h,CF=0,ZF=0,SF=0,OF=0,PF=0(4)ax=0000h,CF=0,ZF=0,SF=0,OF=1,PF=12.16设DS=2000H,BX=1256H,TABLE的偏ax=0ffffh,CF=0,ZF=0,SF=0,OF=1,PF=1(6)ax=0ffffh,C

9、F=0,ZF=0,SF=1,OF=0,PF=1移地址是20A1H,物理地址232F7H处存放后,转移的有效地址是什么?3280H,试问执行下列段内间接寻址的转移指令答:1256h;3280h2.17 判断下列程序段跳转的条件(1) xorax,lelehjeequal(2) testal,10000001bjnzthere(3) cmpcx,64hjbthere答:ax=1e1eh;al=1*1b;cx<64h2.18 如下是一段软件延时程序,请问NOP指令执行了多少次?xorcx,cxdelay:noploopdelay答:655362.19 有一个首地址为array的20个字的数组,

10、说明下列程序段的功能。movcx,20movax,0movsi,axsumlp:addax,arraysiaddsi,2loopsumlpmovtotal,ax答:将array数组的20个字(无进位)累加,其和存入total单元。2.20 按照下列要求,编写相应的程序段:(1) 由string指示的起始地址的主存单元中存放一个字符串(长度大于6),把该字符串的第1个和第6个字符(字节量)传送给DX寄存器。(2) 有两个32位数值,按"小端方式”存放在两个缓冲区buffer1和buffer2中,编写程序段完成DX.AX-buffer1-buffer2功能。(3) 编写一个程序段,在DX

11、高4位全为0时,使AX=0;否则,使AX=-1。(4) 把DX.AX中的双字右移4位。(5) 有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出或借位)存于原处。答:(1)movdl,stringmovdh,string+5movax,wordptrbuffer1subax,wordptrbuffer2movdx,wordptrbuffer1+2sbbdx,buffer2+2testdx,0f0hjet1movax,-1jmpdonet1:movax,0done:.(4)movax,1234hmovdx,5678hmovcx4lp1:shrdx1rcrax1loop

12、lp1leabx,arraymovcx100lp1:subbx,1incbxlooplp12.25编写一个程序段:先提示输入数字"InputNumber:09”字,结束;如果不是键入了09数字,就提示错误“Erro门”,答:.modelsmall.stack100h.datamessagedb“InputNumber:0-9,"0dh,0ah,“$errordb“Error!,0dh,0ah,“$”.code.startupmovdx,offsetmessagemovah,09hint21hbegin1:movah,01hint21hcmpal,0jberr1cmpal,“

13、9”jaerr1movdl,almovah,02hint21h.exiterr1:movoffseterrormovah,09hint21hjmpbegin1end第三章3.11请设置一个数据段,按照如下要求定义变量:(1) my1b为字符串变量,表示字符串"PersonalComputer”。(2) my2b为用十进制数表示的字节变量,这个数的大小为2(3) my3b为用十六进制数表示的字节变量,这个数的大小为(4) my4b为用二进制数表示的字节变量,这个数的大小为2(5) my5w为20个未赋值的字变量。(6) my6c为100的符号常量。(7) my7c为字符串常量,代替字符

14、串"PersonalComputer”。答:,然后在下一行显示输入的数继续等待输入数字。20。4my1bdbPersonalComputer”my2bdb20my3bdb14hmy4bdb00010100bmy5wmy6cmy7cdw20dupequ100equ<PersonalComputer>AX的内容:3.14设在某个程序中有如下片段,请写出每条传送指令执行后寄存器;数据段org100hvarwdw1234h,5678hvarbdb3,4varddd12345678hbuffdb10dupmessdbhello'代码段movax,offsetmessmova

15、x,typebuff+typemess+typevardmovax,sizeofvarw+sizeofbuff+sizeof答:movax,lengthofvarw+lengthofvard珍offsetvarb=0104hoffsetmess=0114htypebuff=1;typemess=1;vard=4typemesssizeofvarw=4;sizeofbuff=10;sizeofmess=5lengthofvarw=2;lengthofvard=13.15假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的具体错误原因。movbyteptrb

16、x,1000(2) movbx,offsetmywordsi(3) cmpmybyte1,mybyte2(4) movmybyte1,al+1(5) subal,myword(6) jnzmyword答:1000大于字节变量所能表示的范围movbyteptrBX,5表示的意思是把5以字节的形式传送给DS:BX,1000超过了0ffh,也就是大于1个字节,所以无法传送会出现errorA2050:Valueoutofrange(值超出数据类型不匹配,目的地址单元是字节单元,1000大于255。无法存放。范围)6OFFSET只能用于简单变量OFFSETS只能跟标识符。6双操作数不能同时为存储器操作数

17、CMP勺两个操作数不能同时在存储器中。学数值表达式应为运算符加常量运算符只能对常数进行操作,不能对变量进行操作。两操作数类型不一致数据类型不匹配,AL是8位的,MYWORD是16位变量。6条件跳转只能是短跳转MYWO3量,其指的单元中存放的是操作数,不能用做跳转入口。3.17已知用于LED数码管的显示代码表为:LEDtabledb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb80h,90h,88h,83h,0c6h,0c1h,86h,8eh它依次表示09,AF这16个数码的显示代码。现编写一个程序实现将lednum中的一个数字(09、AF)转换成对应的LED显示代

18、码。答:stacksegmentstackdb100hdupstackendsdatasegmentledtabledb0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb80h,90h,88h,83h,0c6h,0c1h,86h,8ehlednumdb3dataendscodesegment'code'assumecs:code,ss:stack,ds:datastart:movax,datamovds,axleabx,ledtablemoval,lednumxlatmovax,4c00hint21hcodeendsendstart解析:stack段是

19、缺省的堆栈段时写成stacksegmentparastack'stack'比较简单省事儿,因为这样链接程序会自动设置exe可执行文件里初始堆栈指针,程序里就不用自己进行设置了。如果没有最后的那个'stack'说明项,就需要自己设置ss:sp。stack'是类别名。把我定义的stacksegment关联到栈,省去了assumess:stack对么,所以我可以写成stacksegmentstack.3.18编制一个程序,把变量bufX和bufY中较大者存入bufZ;若两者相等,则把其中之一存入bufZ中。假设变量存放的是8位有符号数。答:datasegmen

20、txdb13ydb-3zdb?dataendsstacksegmentstackdb100dup(?)stackendscodesegment'code'assumecs:code,ds:data,ss:stackstart:movax,datamovds,axmoval,xmovah,ycmpal,ahjbechangemovz,ahjmpdonechange:movz,aldone:movax,4c00hint21hcodeendsendstart3.19设变量bufX为有符号数16位数,请将它的符号状态保存在signX,即:如果变量值大于等于0,保存0;如果X小于0,保存

21、-1.编写该程序。答:datasegmentbuffxdw13signxdw?dataendsstacksegmentstackdb100dupstackendscodesegment'code'assumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovax,buffx;ax=13cmpax,0jbechangemovsignx,0jmpdonechange:movsignx,-1done:movax,4c00hint21hcodeendsendstart3.20bufX、bufY和bufZ是3个有符号十六进制数,编写一个

22、比较相等关系的程序:(1)如果这3个数都不相等,则显示0。(2)如果这3个数中有两个数相等,则显示1。(3)如果这3个数都相等,则显示2。答:datasegmentbufxdb13bufydb-3bufzdb-3dataendsstacksegmentstackdb100dup(?)stackendscodesegment'code'assumecs:code,ds:data,ss:stackstart:movax,datamovds,axmoval,bufxmovbl,bufymovcl,bufzcmpal,bljecaccmpal,cljeview1cmpbl,cljevi

23、ew1movdl,'0'jmpviewcac:cmpal,cljeview2view1:movdl,'1'jmpviewview2:movdl,'2'view:movah,02hint21hmovax,4c00hint21hcodeendsendstart3.21例3.7中,如果要实现所有为1的位都顺序执行相应的处理程序段(而不是例题中仅执行最低为1位的处理程序段),请写出修改后的代码段?答:datasegmentnumberdb78haddrsdwoffsetfun0,offsetfunl,offsetfun2,offsetfun3,offse

24、tfun4,offsetfun5,offsetfun6,offsetfun7dataendsstacksegmentstackdb100dupstackendscodesegment'code'assumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovdh,numbermovcx,8movbx,0lp1:shrdh,1jcnextagain:incbxincbxlooplp1jmpdonenext:jmpaddrsbxfun0:movdl,'0'jmpviewfun1:movdl,'1'jm

25、pviewfun2:movdl,'2'jmpviewfun3:movdl,'3'jmpviewfun4:movdl,'4'jmpviewfun5:movdl,'5'jmpviewfun6:movdl,'6'jmpviewfun7:movdl,'7'jmpviewview:movah,02hint21hjmpagaindone:movax,4c00hint21hcodeendsendstart3.22编制程序完成12H,45H,F3H,6AH,20H,FEH,90H,C8H,57H和34H共10个无符

26、号字节数据之和,并将结果存入字节变量SUM中(不考虑进位)。答:datasegmentnumdb12h,45h,0f3h,6ah,20h,0feh,90h,0c8h,57h,34hsumdb?dataendsstacksegmentstackdb100dup(?)stackendscodesegment'code'assumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovcx,10leabx,numagain:moval,bxaddsum,alincbxloopagainmovax,4c00hint21hcodeendse

27、ndstart16位字的范围(65535),则保存3.23求主存0040H:0开始的一个64KB物理段中共有多少个空格?答:stacksegmentstackdb100dupstackendscodesegment'code'assumecs:code,ss:stackstart:movax,0040hmoves,axmovdi,0movcx,0movbx,0moval,''again:scasbjnenextincbxnext:deccxjneagainmovax,4c00hint21hcodeendsendstart3.24编写计算100个正整数之和的程序。

28、如果和不超过其和到wordsum,如超过则显示overflow!'。答:datasegmentnumdw100dup(800)sumdw?msgdb'Overflow!',13,10,'$'dataendsstacksegmentstackdb100dup(?)stackendscodesegment'code'assumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovcx,100leabx,nummovax,0again:addax,bxincbxincbxjcerrloopaga

29、inmovsum,axjmpdoneerr:movdx,offsetmsgmovah,09hint21hdone:movax,4c00hint21hcodeendsendstart8421BCD码表示的5位十进制,再用余数除以1000,得到“千和“个位”。3.25编制程序完成将一个16位无符号二进制数转换成为用数。转换算法可以是:用二进制数除以10000,商为“万位”位”;一次用余数除以100、10和1,得到“百位”、“十位”答:datasegmentbnumdw19982dnumdb5dup(?),'$'dataendsstacksegmentstackdb100dup(?)

30、stackendscodesegment'code'assumecs:code,ds:data,ss:stackstart:movax,datamovds,axmovax,bnumleabx,dnummovdl,0cwdmovcx,10000divcxaddal,30hmovbx,alincbxmovax,dxcwdmovcx,1000divcxaddal,30hmovbx,alincbxmovax,dxcwdmovcx,100divcxaddal,30hmovbx,alincbxmovax,dxcwdmovcx,10divcxaddal,30hmovbx,alincbxadd

31、dl,30hmovbx,dlmovdx,offsetdnummovah,09hint21hmovax,4c00hint21hcodeendsendstart3.27编写一个源程序,在键盘上按一个键,将从AL返回的ASCII码值显示出来,如果按下ESC键则程序退出。答:stacksegmentstackdb100hdupstackendscodesegment'code'assumecs:code,ss:stackstart:movah,07hint21hcmpal,1bhjedonepushaxmovdl,almovcl,4shrdl,clcallhtoascmovah,02h

32、int21hpopaxmovdl,alanddl,0fhcallhtoascmovah,02hint21hjmpstartdone:movax,4c00hint21hhtoascprocadddl,30hcmpdl,39hjbehtoendadddl,7htoend:rethtoascendpcodeendsendstart3.28请按如下说明编写子程序:;子程序功能:把用ASCII码表示的两位十进制数转换位对应二进制数;入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码;出口参数:AL=对应的二进制数答:stacksegmentstackdb100hdup(?)stackend

33、scodesegment'code'assumecs:code,ss:stackstart:movdx,3932hcallasctohmovax,4c00hint21hasctohprocpushcxsubdx,3030hmovcl,10moval,dhmulcladdal,dlpopcxretasctohendpcodeendsendstart3.29调用HTOASC子程序,编写显示一个字节的16进制数、后跟“H”的子程序。答:stacksegmentstackdb100hdup(?)stackendscodesegment'code'assumecs:cod

34、e,ss:stackstart:movah,07hint21hcmpal,1bhjedonecallhtoahjmpstartdone:movax,4c00hint21hhtoahprocpushaxpushcxpushdxpushaxmovdl,almovcl,4shrdl,clcallhtoascmovah,02hint21hpopaxmovdl,alanddl,0fhcallhtoascmovah,02hint21hmovdl,'H'movah,02hint21hpopdxpopcxpopaxrethtoahendphtoascprocadddl,30hcmpdl,39hjbehtoendadddl,7htoend:rethtoascendpcodeendsendstart3.30写一个子程序,根据入口参数AL=0、1、2,依次实现对大些字母转换成小写、小写转换成大写或大小写字母互换。欲转换的字符串在string中,用0表示结束。答:datasegmentstringdb'abcDEfGh','$

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论