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

下载本文档

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

文档简介

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=(101001

2、01B)原=(11011010B)反=(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:OH =

3、 FFFFOH 40H:17H = 00417H 2000H:4500H = 24500H B821H: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 ,直接寻址; AX=3412H ,寄存器间接寻址; AX=4C2AH ,寄存器

4、相对寻址; AX=7865H ,基址变址寻址; AX=65B7H ,基址变址相对寻址。2.9 说明下面各条指令的具体错误原因:(1 ) mov cx,dl (2)mov ip,ax (3)mov es,1234h (4)mov es,ds(5) mov al,300 (6)mov sp,ax (7)mov ax,bx+di (8)mov 20h,ah答: 操作数类型不同;不能手工修改 IP;不能将立即数直接 MOV 到段寄存器;不能在段寄存器之间直接 MOV 数据; 300 大于 AL 所能存放的数据的范围;寄存器间接寻址只能用 BX/BP/SI/DI 之一; MOV AX , BX+DI ;

5、 目的操作数不能是立即数。2.10 已知数字 09 对应的格雷码依次为: 18H,34H,05H,06H,09H,0AH,0CH,11H,12H,14H, 它存在于以 table 为首地址 (设为 200H )的连续区域中。 请为如下程序段的每条指令加上注 释,说明每条指令的功能和执行结果。leabx,tablemoval,8xlat答:leabx,table;bx=0200hmoval,8;al=08hxlat;al=12h2.11给出下列各条指令执行后的AL值,以及CF,ZF,SF,OF和PF的状态:mov al,89hadd al,aladd al,9dhcmp al,0bchsub a

6、l,aldec alinc al答: al=89h al=12h, CF=1,ZF=0,SF=0,OF=1,PF=1,AF=1 al=afh, CF=0,ZF=0,SF=1,OF=0,PF=1,AF=0 al=afh,CF=1,ZF=0,SF=1,OF=1,PF=1,AF=0 al=00h, CF=0,ZF=1,SF=0,OF=0,PF=1,AF=0 al=ffh ,CF=0,ZF=0,SF=1,OF=0,PF=1,AF=1 al=00h, CF=0,ZF=1,SF=0,OF=0,PF=1,AF=12.12请分别用一条汇编语言指令完成如下功能:(1)把 BX 寄存器和 DX 寄存器的内容相加,

7、结果存入 DX 寄存器。(2)用寄存器 BX 和 SI 的基址变址寻址方式把存储器的一个字节与 AL 寄存器的内容相加并把结果送到 AL 中。用 BX 和位移量 0B2H 的寄存器相对寻址方式把存储器中的一 个字和 CX 寄存器的内容相加,并把结果送回存储器中。(4)用位移量为 0520H 的直接寻址方式把存储器中的一个字与数 3412H 相加,并把结果 送回该存储单元中。(5)把数 0A0H 与 AL 寄存器的内容相加,并把结果送回 AL 中。答:adddx , bx;addal , bx+si ;addbx+00b2h , cxaddword ptr 0520h , 3412haddal

8、, 0a0h2.13设 X,Y,Z,V 均为 16位带符号数,分别装在X,Y,Z,V 存储器单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。mov ax,ximul ymov cx,axmox bx,dxmov ax,zcwdadd cx,axadc bx,dxsub cx,540abb bx,0mov ax,vcwdsub ax,cxabb dx,bxidiv x答:(V ( X * Y + Z 540 ) )/ XCF、OF、SF、ZF、PF 的状态。2.14 给出下列各条指令执行后的结果,以及状态标志 mov ax,1470h and ax,ax or ax,ax xo

9、r ax,axnot ax test ax,0f0f0h答: ax=1470hax=1470h,ax=1470h , ax=0000h , ax=0ffffh , ax=0ffffh ,CF=0,ZF=0,SF=0,OF=0,PF=0CF=0,ZF=0,SF=0,OF=0,PF=0CF=0,ZF=0,SF=0,OF=1,PF=1CF=0,ZF=0,SF=0,OF=1,PF=1CF=0,ZF=0,SF=1,OF=0,PF=1移地址是 20A1H ,物理地址 232F7H 处存放 后,转移的有效地址是什么?答: 1256h; 3280h2.17判断下列程序段跳转的条件2.16 假设 DS=2000

10、H,BX=1256H ,TABLE 的偏3280H,试问执行下列段内间接寻址的转移指令1 ) xor ax,leleh je equal(2) test al,10000001bjnz there(3) cmp cx,64hjb there答: ax=1e1eh; al=1*1b; cx<64h2.18 如下是一段软件延时程序,请问 NOP 指令执行了多少次?xor cx,cxdelay: noploop delay 答: 655362.19 有一个首地址为 array 的 20 个字的数组,说明下列程序段的功能。 mov cx,20mov ax,0mov si,ax sumlp: ad

11、d ax,arraysi add si,2loop sumlpmov total,ax答:将 array 数组的 20 个字 ( 无进位 )累加,其和存入 total 单元。2.20 按照下列要求,编写相应的程序段:1) 由 string 指示的起始地址的主存单元中存放一个字符串(长度大于6),把该字符串的第 1 个和第 6 个字符(字节量)传送给 DX 寄存器。2) 有两个 32 位数值,按 “小端方式” 存放在两个缓冲区 buffer1 和 buffer2 中,编写程 序段完成 DX.A X buffer1-buffer2 功能。3)编写一个程序段,在 DX 高 4 位全为 0 时,使 A

12、X=0; 否则,使 AX=-1 。4)把 DX.AX 中的双字右移 4 位。(5)有一个100个字节元素的数组,其首地址为array,将每个元素减1 (不考虑溢出或借位)存于原处。答: mov dl , stringmov dh, string+5 mov ax, word ptr buffer1sub ax, word ptr buffer2 mov dx, word ptr buffer1+2sbbdx, buffer2+2testdx, 0f0hjet1movax, -1jmpdonet1:movax, 0done:movax,1234hmovdx,5678hmovcx,4lp1shrd

13、x,1rcrax,1looplp1lea bx, arraymovcx,100lp1subbx,1incbxloop lp12.25编写一个程序段:先提示输入数字"In put Number:09 ”,然后在下一行显示输入的数字,结束;如果不是键入了09数字,就提示错误"Error!”,继续等待输入数字。答:.model small.stack100h.datamessagedb"Input Number : 09,'Odh, Oah,“$”errordb“ Error!, 0dh, 0ah,“ $”.code.startupmovdx,offsetmes

14、sagemovah,09hint21hbegi n1:movah, 01hint21hcmpal,“ 0 ”jberr1cmp al, “ 9”jaerr1movdl, almovah, 02hint21h.exiterr1:movoffset errormovah, 09hint21hjmpbegi n1end第三章3. 11请设置一个数据段,按照如下要求定义变量:(1) my1b为字符串变量,表示字符串"Personal Computer”。(2) my2b为用十进制数表示的字节变量,这个数的大小为20。(3) my3b为用十六进制数表示的字节变量,这个数的大小为20。(4) m

15、y4b为用二进制数表示的字节变量,这个数的大小为20。(5) my5w为20个未赋值的字变量。(6) my6c为100的符号常量。(7) my7c为字符串常量,代替字符串"Personal Computer”。答:'拶 my1b db Perso nal Computer ”my2bdb20my3bdb14hmy4bdb00010100bmy5wdw20 dup(?)my6cequ100my7cequ< Pers onal Computer >AX的内容:3. 14设在某个程序中有如下片段,请写出每条传送指令执行后寄存器;数据段org100hvarwdw1234h

16、,5678hvarbdb3,4varddd12345678hbuffdb10 dup(?)messdbhello';代码段movax,offset messmovax,type buff+type mess+type vardmovax,sizeof varw+sizeof buff+sizeof messmovax,le ngthof varw+le ngthof vard答:矗offsetvarb =0104hoffsetmess =0114h矗typebuff = 1;type mess = 1 ;typevard = 4*sizeofvarw = 4;sizeof buff =

17、 10 ;sizeof mess = 5'lengthofvarw =2 ; lengthof vard = 1 3. 15假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中 的具体错误原因。 mov byte ptr bx,1000(2) mov bx,offset mywordsi(3) cmp mybytel, mybyte2(4) mov mybyte1,al+1(5) sub al,myword(6) jnz myword答:矗1000大于字节变量所能表示的范围mov byte ptr BX,5表示的意思是把5以字节的形式传送给 DS:

18、BX ,1000超过了 0ffh,也就是大于1个字节,所以无法传送会出现error A2050: Value out of range(值超出范围)数据类型不匹配,目的地址单元是字节单元,1000大于255。无法存放。OFFSET只能用于简单变量OFFSETS只能跟标识符。矗双操作数不能同时为存储器操作数CMP的两个操作数不能同时在存储器中。倉数值表达式应为运算符加常量运算符只能对常数进行操作,不能对变量进行操作。強两操作数类型不一致数据类型不匹配, AL是8位的,MYWORD是16位变量。矗条件跳转只能是短跳转MYWORD变量,其指的单元中存放的是操作数,不能用做跳转入口。3. 17已知用于

19、LED数码管的显示代码表为:LEDtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8hdb 80h,90h,88h,83h,0c6h,0c1h,86h,8eh它依次表示09, AF这16个数码的显示代码。现编写一个程序实现将led num中的一个数字(09、AF )转换成对应的 LED显示代码。答:stack segme nt stackdb 100h dupstack ends data segme ntledtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h db 80h,90h,88h,83h,0c6h,0c1

20、h,86h,8eh ledn um db 3data endscode segment 'code'assume cs:code,ss:stack,ds:datastart:mov ax,datamov ds,axlea bx,ledtablemov al,led numxlatmov ax,4cOOh int 21h code ends end start解析:stack段是缺省的堆栈段时写成stack segment para stack'stack'比较简单省事儿,因为这样链接程序会自动设置 exe可执行文件里初始堆栈指针,程序里就不用自己进行设置了。如果

21、没有最后的那 个'stack'说明项,就需要自己设置 ss:sp。stack'是类别名。把我定义的 stack segment关联到栈,省去了 assume ss:stack 对么,所以我可以写成 stack segment stack.3. 18编制一个程序,把变量bufX和bufY中较大者存入 bufZ ;若两者相等,则把其中之一存入bufZ中。假设变量存放的是8位有符号数。答:data segme ntxdb13ydb-3zdb?data endsstack segme ntstackdb 100 dup(?)stack endscode segment '

22、;code'assume cs:code, ds:data, ss:stackstart:mov ax,datamov ds,axmov al,xmov ah,ycmp al,ah jbe change mov z,ah jmp done change: mov 乙al done:mov ax,4c00hint 21hcode endsend start3. 19设变量bufX为有符号数16位数,请将它的符号状态保存在signX,即:如果变量值大于等于 0,保存 0;如果 X 小于 0,保存 -1. 编写该程序。答:data segmentbuffx dw 13 signx dwdat

23、a endsstack segment stack db 100 dup(?)stack ends code segment 'code' assume cs:code, ds:data, ss:stack start:mov ax,datamov ds,axmov ax,buffx ;ax=13cmp ax,0jbe changemov signx,0jmp donechange:mov signx,-1done:mov ax,4c00hint 21hcode endsend start3. 20 bufX、bufY和bufZ是3个有符号十六进制数,编写一个比较相等关系的程序

24、: (1 )如果这 3 个数都不相等,则显示 0。(2)如果这 3 个数中有两个数相等,则显示 1 。(3)如果这 3 个数都相等,则显示 2 。答:data segmentbufxdb13bufydb-3bufzdb-3dataendsstack segment stack db 100 dup(?)stack endscode segment 'code' assume cs:code, ds:data, ss:stackstart:mov movax,datads,axmoval,bufxmovbl,bufymovcl,bufzcmpal,bljecaccmpal,clj

25、eview1cmpbl,cljeview1movdl,'0'jmpviewcac:cmpal,cljeview2view1:movdl,'1'jmpviewview2:movdl,'2'view:movah,02hint21hmovax,4c00hint21hcodeendsendstart321例 3.7 中,如果要实现所有为 1的位都顺序执行相应的处理程序段(而不是例题中仅 执行最低为 1 位的处理程序段) ,请写出修改后的代码段?答:data segmentnumber db 78haddrs dw offset fun0, offset

26、fun1, offset fun2, offset fun3, offset fun4, offset fun5, offset fun6, offset fun7 data endsstack segment stackdb 100 dup(?)stack endscode segment 'code'assume cs:code, ds:data, ss:stackstart:mov ax, datamov ds, axmov dh, numbermov cx, 8mov bx, 0lp1:shr dh, 1jc nextagain:inc bxinc bxloop lp1

27、jmp donenext:jmp addrsbxfun0:mov dl, '0'jmp viewfun1:mov dl, '1'jmp viewfun2:mov dl, '2'jmp viewfun3:mov dl, '3'jmp fun4:viewmov jmp fun5:dl, '4' viewmovdl, '5'jmp fun6:viewmovdl, '6'jmp fun7:viewmov jmpdl, '7' viewview:movah, 02hint 21

28、hjmpagaindone:movax, 4c00hint 21hcode endsend start3. 22 编制程序完成 12H, 45H, F3H, 6AH, 20H, FEH, 90H, C8H, 57H 和 34H 共 10 个无符号 字节数据之和,并将结果存入字节变量 SUM 中(不考虑进位) 。答:datasegmentnumdb 12h, 45h, 0f3h, 6ah, 20h, 0feh, 90h, 0c8h, 57h, 34hsum datadb ? endsstacksegment stack db 100 dup(?)stackendscodesegment '

29、;code'assume cs:code, ds:data, ss:stack start:movax, datamovds, axmovcx, 10lea bx, numagain:mov al, bx add sum, al inc bx loop againmov ax, 4c00hint 21h code ends end start323 求主存 0040H : 0 开始的一个 64KB 物理段中共有多少个空格? 答:stack segment stack db 100 dup(?)stack endscode segment 'code'assume cs:

30、code, ss:stackstart:mov ax, 0040hmov es, axmov di, 0mov cx, 0mov bx, 0mov al, ' 'again:scasbjne nextinc bxnext:dec cxjne againmov ax, 4c00hint 21h code ends end start 3 24 编写计算 100 个正整数之和的程序。如果和不超过 16 位字的范围( 65535),则保存 其和到wordsum,如超过则显示overflow !'答:data segmentnum dw 100 dup(800)sum dw ?

31、msg db 'Overflow!', 13, 10, '$' data endsstack segment stack db 100 dup(?)stack endscode segment 'code' assume cs:code, ds:data, ss:stack start:movax, datamovds, axmovcx, 100leabx, nummovax, 0again:addax, bxincbxincbxjcerrloop againmov sum, axjmp doneerr:mov dx, offset msgmov

32、 ah, 09hint 21hdone:mov ax, 4c00hint 21hcode endsend start325编制程序完成将一个 16位无符号二进制数转换成为用 8421BCD 码表示的 5 位十进制 数。转换算法可以是: 用二进制数除以 10000,商为“万位”,再用余数除以 1000,得到“千 位”;一次用余数除以 100、10和 1,得到“百位” 、“十位”和“个位” 。答:data segmentbnum dw 19982dnum db 5 dup(?), '$' data endsstack segment stack db 100 dup(?)stack

33、 endscode segment 'code' assume cs:code, ds:data, ss:stackstart:movax, datamovds, axmovax, bnumleabx, dnummovdl, 0cwdmovcx, 10000divcxaddal, 30hmovbx, alincbxmovax, dxcwdmovcx, 1000divcxaddal, 30hmovbx, alincbxmovax, dxcwdmovcx, 100divcxaddal, 30hmovbx, alincbxmovax, dxcwdmov cx, 10div cxadd

34、 al, 30h mov bx, al inc bxadd dl, 30hmov bx, dlmov dx, offset dnummov ah, 09hint 21hmov ax, 4c00hint 21hcode endsend start327 编写一个源程序,在键盘上按一个键,将从AL 返回的 ASCII 码值显示出来,如果按下 ESC 键则程序退出。答:stacksegmentstackdb 100h dup(?)stackendscodesegment'code'assume cs:code, ss:stackstart:movah, 07hint21hcmpal,

35、 1bhjedonepushaxmovdl, almovcl, 4shrdl, clcall htoasc mov ah, 02h int 21hpop ax mov dl, al and dl, 0fh call htoasc mov ah, 02h int 21hjmp startdone:mov ax, 4c00hint 21hhtoasc procadd dl, 30h cmp dl, 39h jbe htoendadd dl, 7htoend:rethtoasc endpcode endsend start328 请按如下说明编写子程序:;子程序功能:把用 ASCII 码表示的两位十

36、进制数转换位对应二进制数;入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码;出口参数: AL= 对应的二进制数答:stacksegment stackdb 100h dup(?)stackendscodesegment 'codassume cs:code, ss:stack start:mov dx, 3932hcall asctohmov ax, 4c00hint 21hasctoh procpush cxsub dx, 3030h mov cl, 10 mov al, dh mul cl add al, dl pop cx ret asctoh endpH”的子程

37、序。code ends end start 329 调用 HTOASC 子程序,编写显示一个字节的16进制数、后跟答:stack segment stack db 100h dup(?) stack endscodesegment 'codassume cs:code, ss:stackstart:mov ah, 07h int 21hcmp al, 1bh je donecall htoahjmp startdone:mov ax, 4c00h int 21hhtoah procpush ax push cx push dx push ax mov dl, al mov cl, 4

38、shr dl, cl call htoascmov ah, 02hint 21h pop ax mov dl, al and dl, 0fh call htoasc mov ah, 02h int 21h mov dl, 'H' mov ah, 02h int 21h pop dx pop cx pop ax ret htoah endp htoasc proc add dl, 30h cmp dl, 39h jbe htoend add dl, 7 htoend: rethtoasc endp code endsend start3 30 写一个子程序,根据入口参数 AL=0 、 1、 2,依次实现对大些字母转换成小写、小写 转换成大写或大小写字母互换。欲转换的字符串在 string 中,用 0 表示结束。答:data segmentstring db 'abcDEfGh', '$'data endsstack segment stack db

温馨提示

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

最新文档

评论

0/150

提交评论