收藏 分销(赏)

微机原理及应用教材课后习题及答案.doc

上传人:丰**** 文档编号:3062436 上传时间:2024-06-14 格式:DOC 页数:22 大小:81KB
下载 相关 举报
微机原理及应用教材课后习题及答案.doc_第1页
第1页 / 共22页
微机原理及应用教材课后习题及答案.doc_第2页
第2页 / 共22页
微机原理及应用教材课后习题及答案.doc_第3页
第3页 / 共22页
微机原理及应用教材课后习题及答案.doc_第4页
第4页 / 共22页
微机原理及应用教材课后习题及答案.doc_第5页
第5页 / 共22页
点击查看更多>>
资源描述

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

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

3、500H = 24500H B821H:4567H = BC777Hl2.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,寄存器相对寻址; AX=7865H,基址变址寻址; AX=65B7H,基址变址相对寻址。l2.9 说明下面各条指令

4、的具体错误原因:(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; 目的操作数不能是立即数。l2.10 已知数字09对应的格雷码依次为:18H,34H,05H,06H,09H,0AH,0CH,11

5、H,12H,14H,它存在于以table为首地址(设为200H)的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。lea bx,table mov al,8 xlat 答:lea bx,table ;bx=0200hmov al,8 ;al=08hxlat ;al=12hl2.11给出下列各条指令执行后的AL值,以及CF,ZF,SF,OF和PF的状态:mov al,89hadd al,aladd al,9dhcmp al,0bchsub al,aldec alinc al答: al=89h al=12h,CF=1,ZF=0,SF=0,OF=1,PF=1,AF=1 a

6、l=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=1l2.12请分别用一条汇编语言指令完成如下功能:(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加并把结果送到AL中。(3) 用BX和

7、位移量0B2H的寄存器相对寻址方式把存储器中的一个字和CX寄存器的内 容相加,并把结果送回存储器中。(4) 用位移量为0520H的直接寻址方式把存储器中的一个字与数3412H相加,并把结果 送回该存储单元中。(5) 把数0A0H与AL寄存器的内容相加,并把结果送回AL中。答: add dx, bx; add al,bx+si; add bx+00b2h,cx add word ptr 0520h,3412h add al,0a0hl2.13设X,Y,Z,V均为16位带符号数,分别装在X,Y,Z,V存储器单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。mov ax,ximul

8、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 ) )/ Xl2.14给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。mov ax,1470hand ax,axor ax,axxor ax,axnot axtest ax,0f0f0h答: ax=1470h ax=1470h,CF=0,ZF=0,SF=0,OF=0,PF=0 ax=1470h,CF=0,ZF=0,SF=0,

9、OF=0,PF=0 ax=0000h,CF=0,ZF=0,SF=0,OF=1,PF=1 ax=0ffffh, CF=0,ZF=0,SF=0,OF=1,PF=1 ax=0ffffh, CF=0,ZF=0,SF=1,OF=0,PF=1l2.16假设DS=2000H,BX=1256H,TABLE的偏移地址是20A1H,物理地址232F7H处存放3280H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么?答: 1256h; 3280hl2.17判断下列程序段跳转的条件(1) xor ax,lelehje equal(2) test al,10000001bjnz there(3) cmp

10、cx,64hjb there答: ax=1e1eh; al=1*1b; cx64hl2.18如下是一段软件延时程序,请问NOP指令执行了多少次? xor cx,cxdelay: nop loop delay答:65536l2.19 有一个首地址为array的20个字的数组,说明下列程序段的功能。 mov cx,20mov ax,0mov si,axsumlp: add ax,arraysi add si,2 loop sumlp mov total,ax答:将array数组的20个字(无进位)累加,其和存入total单元。l2.20按照下列要求,编写相应的程序段:(1) 由string指示的起

11、始地址的主存单元中存放一个字符串(长度大于6),把该字符串的第1个和第6个字符(字节量)传送给DX寄存器。(2) 有两个32位数值,按“小端方式”存放在两个缓冲区buffer1和 buffer2中,编写程序段完成DX.AXbuffer1-buffer2功能。(3) 编写一个程序段,在DX高4位全为0时,使AX=0;否则,使AX=-1。(4) 把DX.AX中的双字右移4位。(5) 有一个100个字节元素的数组,其首地址为array,将每个元素减1(不考虑溢出或借位)存于原处。答: mov dl,string mov dh,string+5 mov ax,word ptr buffer1 sub

12、ax, word ptr buffer2 mov dx,word ptr buffer1+2 sbb dx,buffer2+2 test dx,0f0h je t1 mov ax,-1 jmp donet1: mov ax,0done: . mov ax,1234h mov dx,5678h mov cx,4lp1: shr dx,1 rcr ax,1 loop lp1 lea bx,array mov cx,100lp1: sub bx,1 inc bx loop lp1l2.25编写一个程序段:先提示输入数字“Input Number:09”,然后在下一行显示输入的数字,结束;如果不是键入

13、了09数字,就提示错误“Error!”,继续等待输入数字。答: .model small .stack 100h .data message db “Input Number : 09”,0dh,0ah, “$” error db “Error!”,0dh,0ah, “$” .code .startup mov dx,offset message mov ah,09h int 21hbegin1: mov ah,01h int 21h cmp al, “0” jb err1 cmp al, “9” ja err1 mov dl,al mov ah,02h int 21h .exiterr1:

14、mov offset error mov ah,09h int 21h jmp begin1 end第三章311请设置一个数据段,按照如下要求定义变量:(1)my1b为字符串变量,表示字符串“Personal Computer”。(2)my2b为用十进制数表示的字节变量,这个数的大小为20。(3)my3b为用十六进制数表示的字节变量,这个数的大小为20。(4)my4b为用二进制数表示的字节变量,这个数的大小为20。(5)my5w为20个未赋值的字变量。(6)my6c为100的符号常量。(7)my7c为字符串常量,代替字符串“Personal Computer”。答:my1b db “Perso

15、nal Computer”my2b db 20my3b db 14hmy4b db 00010100bmy5w dw 20 dup(?)my6c equ 100my7c equ 314设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容: ;数据段 org 100hvarw dw 1234h,5678h varb db 3,4 vard dd 12345678h buff db 10 dup(?) mess db hello ;代码段 mov ax,offset mess mov ax,type buff+type mess+type vard mov ax,sizeof var

16、w+sizeof buff+sizeof mess mov ax,lengthof varw+lengthof vard答:offset varb = 0104hoffset mess = 0114htype buff = 1;type mess = 1;type vard = 4sizeof varw = 4;sizeof buff = 10;sizeof mess = 5lengthof varw =2;lengthof vard = 1315假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的具体错误原因。 mov byte ptr bx,1000

17、(2) mov bx,offset mywordsi(3) cmp mybyte1, mybyte2(4) mov mybyte1,al+1(5) sub al,myword(6) jnz myword答:1000大于字节变量所能表示的范围mov byte ptr BX,5表示的意思是把5以字节的形式传送给DS:BX,1000超过了0ffh,也就是大于1个字节,所以无法传送会出现 error A2050: Value out of range(值超出范围)数据类型不匹配,目的地址单元是字节单元,1000大于255。无法存放。OFFSET只能用于简单变量OFFSET后只能跟标识符。双操作数不能同

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

19、转换成对应的LED显示代码。答:stack segmentstack db 100h dup(?)stack endsdata segmentledtable db 0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h db 80h,90h,88h,83h,0c6h,0c1h,86h,8ehlednum db 3data endscode segment codeassumecs:code,ss:stack,ds:datastart:mov ax,datamov ds,axlea bx,ledtablemov al,lednumxlatmov ax,4c00hint 21h

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

21、mentx db13y db-3z db?data endsstack segmentstack db100 dup(?)stack endscode segment codeassumecs:code, ds:data, ss:stackstart:mov ax,datamov ds,axmov al,xmov ah,ycmp al,ahjbe changemov z,ahjmp donechange:mov z,aldone:mov ax,4c00hint 21hcode endsend start319设变量bufX为有符号数16位数,请将它的符号状态保存在signX,即:如果变量值大于

22、等于0,保存0;如果X小于0,保存-1.编写该程序。答:data segmentbuffxdw13signxdw?data endsstack segmentstack db100 dup(?)stack endscode segment codeassumecs:code, ds:data, ss:stackstart:mov ax,datamov ds,axmov ax,buffx ;ax=13cmp ax,0jbe changemov signx,0jmp donechange:mov signx,-1done:mov ax,4c00hint 21hcode endsend start3

23、20 bufX、bufY和bufZ是3个有符号十六进制数,编写一个比较相等关系的程序:(1)如果这3个数都不相等,则显示0。(2)如果这3个数中有两个数相等,则显示1。(3)如果这3个数都相等,则显示2 。答:data segmentbufx db13bufy db-3bufz db-3data endsstack segmentstack db100 dup(?)stack endscode segment codeassumecs:code, ds:data, ss:stackstart:mov ax,datamov ds,axmov al,bufxmov bl,bufymov cl,bu

24、fzcmp al,blje caccmp al,clje view1cmp bl,clje view1mov dl,0jmp viewcac:cmp al,clje view2view1:mov dl,1jmp viewview2:mov dl,2view:mov ah,02hint 21hmov ax,4c00hint 21hcode endsend start321例3.7中,如果要实现所有为1的位都顺序执行相应的处理程序段(而不是例题中仅执行最低为1位的处理程序段),请写出修改后的代码段?答:data segmentnumberdb 78haddrsdw offset fun0, off

25、set fun1, offset fun2, offset fun3, offset fun4, offset fun5, offset fun6, offset fun7data endsstack segmentstack db 100 dup(?)stack endscode segment codeassumecs:code, ds:data, ss:stackstart:mov ax, datamov ds, axmov dh, numbermov cx, 8mov bx, 0lp1:shr dh, 1jc nextagain:inc bxinc bxloop lp1jmp done

26、next:jmp addrsbxfun0:mov dl, 0jmp viewfun1:mov dl, 1jmp viewfun2:mov dl, 2jmp viewfun3:mov dl, 3jmp viewfun4:mov dl, 4jmp viewfun5:mov dl, 5jmp viewfun6:mov dl, 6jmp viewfun7:mov dl, 7jmp viewview:mov ah, 02hint 21hjmp againdone:mov ax, 4c00hint 21hcode endsend start322编制程序完成12H, 45H, F3H, 6AH, 20H,

27、 FEH, 90H, C8H, 57H和34H共10个无符号字节数据之和,并将结果存入字节变量SUM中(不考虑进位)。答:data segmentnum db 12h, 45h, 0f3h, 6ah, 20h, 0feh, 90h, 0c8h, 57h, 34hsum db ?data endsstack segmentstack db 100 dup(?)stack endscode segment codeassumecs:code, ds:data, ss:stackstart:mov ax, datamov ds, axmov cx, 10lea bx, numagain:mov al

28、, bxadd sum, alinc bxloop againmov ax, 4c00hint 21hcode endsend start323 求主存0040H:0开始的一个64KB物理段中共有多少个空格?答:stack segmentstack db 100 dup(?)stack endscode segment codeassumecs:code, ss:stackstart:mov ax, 0040hmov es, axmov di, 0mov cx, 0mov bx, 0mov al, again:scasbjne nextinc bxnext:dec cxjne againmov

29、 ax, 4c00hint 21hcode endsend start324编写计算100个正整数之和的程序。如果和不超过16位字的范围(65535),则保存其和到wordsum,如超过则显示 overflow!。答:data segmentnum dw 100 dup(800)sum dw ?msg db Overflow!, 13, 10, $data endsstack segmentstack db 100 dup(?)stack endscode segment codeassumecs:code, ds:data, ss:stackstart:mov ax, datamov ds,

30、 axmov cx, 100lea bx, nummov ax, 0again:add ax, bxinc bxinc bxjc errloop againmov sum, axjmp doneerr:mov dx, offset msgmov ah, 09hint 21hdone:mov ax, 4c00hint 21hcode endsend start325编制程序完成将一个16位无符号二进制数转换成为用8421BCD码表示的5位十进制数。转换算法可以是:用二进制数除以10000,商为“万位”,再用余数除以1000,得到“千位”;一次用余数除以100、10和1,得到“百位”、“十位”和“

31、个位”。答:data segmentbnum dw 19982dnum db 5 dup(?), $data endsstack segmentstack db 100 dup(?)stack endscode segment codeassumecs:code, ds:data, ss:stackstart:mov ax, datamov ds, axmov ax, bnumlea bx, dnummov dl, 0cwdmov cx, 10000div cxadd al, 30hmov bx, alinc bxmov ax, dxcwdmov cx, 1000div cxadd al, 3

32、0hmov bx, alinc bxmov ax, dxcwdmov cx, 100div cxadd al, 30hmov bx, alinc bxmov ax, dxcwdmov cx, 10div cxadd al, 30hmov bx, alinc bxadd dl, 30hmov bx, dlmov dx, offset dnummov ah, 09hint 21hmov ax, 4c00hint 21hcode endsend start327编写一个源程序,在键盘上按一个键,将从AL返回的ASCII码值显示出来,如果按下ESC键则程序退出。答:stack segmentstack

33、 db 100h dup(?)stack endscode segment codeassume cs:code, ss:stackstart:mov ah, 07hint 21hcmp al, 1bhje donepush axmov dl, almov cl, 4shr dl, clcall htoascmov ah, 02hint 21hpop axmov dl, aland dl, 0fhcall htoascmov ah, 02hint 21hjmp startdone:mov ax, 4c00hint 21hhtoascprocadd dl, 30hcmp dl, 39hjbe h

34、toendadd dl, 7htoend:rethtoascendpcode endsend start328请按如下说明编写子程序:;子程序功能:把用ASCII码表示的两位十进制数转换位对应二进制数;入口参数:DH=十位数的ASCII码,DL=个位数的ASCII码;出口参数:AL=对应的二进制数答:stack segmentstack db 100h dup(?)stack endscode segment codeassume cs:code, ss:stackstart:mov dx, 3932hcall asctohmov ax, 4c00hint 21hasctohprocpush

35、cxsub dx, 3030hmov cl, 10mov al, dhmul cladd al, dlpop cxretasctohendpcode endsend start329调用HTOASC子程序,编写显示一个字节的16进制数、后跟“H”的子程序。答:stack segmentstack db 100h dup(?)stack endscode segment codeassume cs:code, ss:stackstart:mov ah, 07hint 21hcmp al, 1bhje donecall htoahjmp startdone:mov ax, 4c00hint 21h

36、htoahprocpush axpush cxpush dxpush axmov dl, almov cl, 4shr dl, clcall htoascmov ah, 02hint 21hpop axmov dl, aland dl, 0fhcall htoascmov ah, 02hint 21hmov dl, Hmov ah, 02hint 21hpop dxpop cxpop axrethtoahendphtoascprocadd dl, 30hcmp dl, 39hjbe htoendadd dl, 7htoend:rethtoascendpcode endsend start330

37、写一个子程序,根据入口参数AL=0、1、2,依次实现对大些字母转换成小写、小写转换成大写或大小写字母互换。欲转换的字符串在string中,用0表示结束。答:data segmentstringdb abcDEfGh, $data endsstack segmentstack db 100 dup(?)stack endscode segment codeassume cs:code, ds:data, ss:stackstart:mov ax, datamov ds, axmov al, 2call changemov dx, offset stringmov ah, 09hint 21hmo

38、v al, 0call changemov dx, offset stringmov ah, 09hint 21hmov al, 1call changemov dx, offset stringmov ah, 09hint 21hmov ax, 4c00hint 21hchangeproclea bx, stringcmp al, 0je cg1cmp al, 1je cg2cg3:cmp byte ptr bx, $je donecmp byte ptr bx, 5ahja xtodadd byte ptr bx, 20hjmp cg33xtod:sub byte ptr bx, 20hc

39、g33:inc bxjmp cg3cg2:cmp byte ptr bx, $je donecmp byte ptr bx, 61hjb cg22sub byte ptr bx, 20hcg22:inc bxjmp cg2cg1:cmp byte ptr bx, $je donecmp byte ptr bx, 5ahja cg11add byte ptr bx, 20hcg11:inc bxjmp cg1done:retchangeendpcode endsend start334编写一个计算字节校验和的子程序。所谓“校验和”是指不记进位的累加,常用于检查信息的正确性。主程序提供入口参数,有数据个数和数据缓冲区的首地址。子程序回送求和结果这个出口参数。传递参数方法自定。答:data segmentcount = 10array db count dup(10h)check d

展开阅读全文
部分上传会员的收益排行 01、路***(¥15400+),02、曲****(¥15300+),
03、wei****016(¥13200+),04、大***流(¥12600+),
05、Fis****915(¥4200+),06、h****i(¥4100+),
07、Q**(¥3400+),08、自******点(¥2400+),
09、h*****x(¥1400+),10、c****e(¥1100+),
11、be*****ha(¥800+),12、13********8(¥800+)。
相似文档                                   自信AI助手自信AI助手
搜索标签

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服