《微机原理及应用》习题答案第一章⏹1.11 请完成下列数制转换:(1)将174.66D转换为对应的二进制和十六进制形式。
(2)将1.01011B转换为对应的十进制和十六进制形式。
(3)将F18A6.6H转换为对应的二进制和十进制形式。
答:174.66D=10101110.1010B=AE.AH1.01011B=2283.34375D=8EB.58HF18A6.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所能存放的数据的范围;⑹寄存器间接寻址只能用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,tablemov al,8xlat答:lea bx,table ;bx=0200hmov al,8 ;al=08hxlat ;al=12h●2.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⑶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存储器单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。
imul 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 ) )/ X●2.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,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,lelehje equal(2)test al,10000001bjnz there(3)cmp cx,64hjb there答:⑴ax=1e1eh;⑵al=1******1b;⑶cx<64h●2.18如下是一段软件延时程序,请问NOP指令执行了多少次?xor cx,cxdelay: noploop delay●2.19 有一个首地址为array的20个字的数组,说明下列程序段的功能。
mov cx,20mov ax,0mov si,axsumlp: add ax,array[si]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时,使AX=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 buffer2mov dx,word ptr buffer1+2sbb dx,buffer2+2⑶test dx,0f0hje t1mov ax,-1jmp donet1: mov ax,0done: …..⑷mov ax,1234hmov dx,5678hmov cx,4lp1:shr dx,1rcr ax,1loop lp1⑸lea bx,arraymov cx,100lp1:sub [bx],1inc bx2.25编写一个程序段:先提示输入数字“Input Number:0~9”,然后在下一行显示输入的数字,结束;如果不是键入了0~9数字,就提示错误“Error!”,继续等待输入数字。
答:.model small.stack 100h.datamessage db “Input Number : 0~9”,0dh,0ah,“$”error db “Error!”,0dh,0ah,“$”.code.startupmov dx,offset messagemov ah,09hint 21hbegin1: mov ah,01hint 21hcmp al,“0”jb err1 cmp al,“9”ja err1mov dl,almov ah,02hint 21h.exiterr1: mov offset errormov ah,09hint 21hjmp begin1end第三章3.11请设置一个数据段,按照如下要求定义变量:(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 “Personal Computer”my2b db 20my3b db 14hmy4b db 00010100bmy5w dw 20 dup(?)my6c equ 100my7c equ < Personal Computer >3.14设在某个程序中有如下片段,请写出每条传送指令执行后寄存器AX的内容:;数据段org 100hvarw dw 1234h,5678hvarb db 3,4vard dd 12345678hbuff db 10 dup(?)mess db ‘hello’;代码段mov ax,offset messmov ax,type buff+type mess+type vardmov ax,sizeof varw+sizeof buff+sizeof messmov 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 = 13.15假设myword是一个字变量,mybyte1和mybyte2是两个字节变量,指出下列语句中的具体错误原因。