微机原理及应用教材课后习题及答案 下载本文

《微机原理及应用》习题答案

第一章

?1.11 请完成下列数制转换:

(1) 将174.66D转换为对应的二进制和十六进制形式。 (2) 将1.01011B转换为对应的十进制和十六进制形式。 (3) 将F18A6.6H转换为对应的二进制和十进制形式。 答:174.66D=10101110.1010B=AE.AH

1.01011B=2283.34375D=8EB.58H F18A6.6H=989350.375D

?1.12 请写出与数据+37和-37对应的8位机器数原码、反码和补码,并分别用二进制和十六进制表示出来。

答:-37D=(10100101B)原=(11011010B)反=(11011011B)补

?1.13 8位机器数46H,若作为无符号数和补码有符号数,其对应的真值各是什么?若作为BCD码和ASCII码,其对应的又是什么?

答:无符号数46H=70,补码46H=+70 BCD码46H=46,ASCII码46H=“F”

第二章

?2.5什么是8088中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?1MB最多能分成多少个逻辑段?请将如下逻辑地址用物理地址表达:

(1) FFFFH:0H (2) 40H:17H (3) 2000H:4500H (4) B821H:4567H

答:⑴ FFFFH:0H = FFFF0H ⑵ 40H:17H = 00417H ⑶ 2000H:4500H = 24500H ⑷ B821H:4567H = BC777H

?2.8已知DS=2000H,BX=0100H,SI=0002,存储单元[20100H]~[20103H]依次存放12H,34H,56H,78H,[21200H]~[21203H]依次存放2AH,4CH,87H,65H,说明下列每条指令执行完后AX寄存器的内容以及源操作数的寻址方式? 答:⑴ AX=1200H,立即数寻址; ⑵ AX=0100H,寄存器寻址; ⑶ AX=4C2AH,直接寻址;

⑷ AX=3412H,寄存器间接寻址; ⑸ AX=4C2AH,寄存器相对寻址; ⑹ 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所能存放的数据的范围;

1 / 27

⑹寄存器间接寻址只能用BX/BP/SI/DI之一; ⑺MOV AX,[BX+DI]; ⑻目的操作数不能是立即数。

?2.10 已知数字0~9对应的格雷码依次为:18H,34H,05H,06H,09H,0AH,0CH,11H,12H,14H,它存在于以table为首地址(设为200H)的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。 lea bx,table mov al,8 xlat 答:

lea bx,table ;bx=0200h mov al,8 ;al=08h xlat ;al=12h

?2.11给出下列各条指令执行后的AL值,以及CF,ZF,SF,OF和PF的状态: mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al inc 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=1 ?2.12请分别用一条汇编语言指令完成如下功能:

(1)把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器。

(2)用寄存器BX和SI的基址变址寻址方式把存储器的一个字节与AL寄存器的内容相加

并把结果送到AL中。用BX和位移量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,0a0h

?2.13设X,Y,Z,V均为16位带符号数,分别装在X,Y,Z,V存储器单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。

2 / 27

mov ax,x imul y mov cx,ax mox bx,dx mov ax,z cwd

add cx,ax adc bx,dx sub cx,540 abb bx,0 mov ax,v cwd

sub ax,cx abb dx,bx idiv x

答:(V -( X * Y + Z - 540 ) )/ X

?2.14给出下列各条指令执行后的结果,以及状态标志CF、OF、SF、ZF、PF的状态。 mov ax,1470h and ax,ax or ax,ax xor ax,ax not ax

test ax,0f0f0h

答:⑴ ax=1470h

⑵ ax=1470h,CF=0,ZF=0,SF=0,OF=0,PF=0 ⑶ ax=1470h,CF=0,ZF=0,SF=0,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=1?2.16假设DS=2000H,BX=1256H,TABLE的偏移地址是20A1H,物理地址232F7H处存放3280H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么? 答:⑴ 1256h; ⑵ 3280h

?2.17判断下列程序段跳转的条件

(1) xor ax,leleh

je equal

(2) test al,10000001b

jnz there (3) cmp cx,64h

jb there

答:⑴ ax=1e1eh; ⑵ al=1******1b; ⑶ cx<64h

?2.18如下是一段软件延时程序,请问NOP指令执行了多少次? xor cx,cx delay: nop

loop delay

3 / 27

答:65536

?2.19 有一个首地址为array的20个字的数组,说明下列程序段的功能。 mov cx,20

mov ax,0 mov si,ax

sumlp: add ax,array[si] add si,2 loop sumlp mov total,ax

答:将array数组的20个字(无进位)累加,其和存入total单元。 ?2.20按照下列要求,编写相应的程序段:

(1) 由string指示的起始地址的主存单元中存放一个字符串(长度大于6),把该字符串

的第1个和第6个字符(字节量)传送给DX寄存器。

(2) 有两个32位数值,按“小端方式”存放在两个缓冲区buffer1和 buffer2中,编写程

序段完成DX.AX←buffer1-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 ax, word ptr buffer2 mov dx,word ptr buffer1+2 sbb dx,buffer2+2 ⑶ test dx,0f0h je t1 mov ax,-1 jmp done t1: mov ax,0 done: …..

⑷ mov ax,1234h mov dx,5678h mov cx,4 lp1:

shr dx,1 rcr ax,1 loop lp1 ⑸ lea bx,array mov cx,100 lp1:

sub [bx],1 inc bx

4 / 27