微机原理陈继红版部分答案.docx
《微机原理陈继红版部分答案.docx》由会员分享,可在线阅读,更多相关《微机原理陈继红版部分答案.docx(54页珍藏版)》请在冰豆网上搜索。
微机原理陈继红版部分答案
第三章8086/8088指令系统和寻址方式习题答案
3.1总结计算机中十进制、二进制、八进制及十六进制数的书写形式。
123D、0AFH、
77Q、1001110B分别表示什么计数制的数?
答案:
123D、0AFH、77Q、1001110B分别表示十进制、十六进制、八进制、二进制。
3.2字长为8位、16位二进制数的原码、补码表示的最大数和最小数分别是什么?
答案:
8位原码表示的最大数:
(2-1)、8位补码表示的最大数:
(2-1)、8位原码表77示
的最小数:
-(2-1)、8位补码表示的最小数-2。
7716位原码表示的最大数:
(2-1)、16位补码表示的最大数:
(2-1)、16位原码表示1515的
最小数:
-(2-1)、16位补码表示的最小数-2。
15153.3把下列十进制数分别转换为二进制数和十六进制数。
(1)125
(2)255(3)72(4)5090
答案:
(1)125二进制数:
01111101B;十六进制数:
7DH。
(2)255二进制数:
11111111B;十六进制数:
0FFH。
(3)72二进制数:
01001000B;十六进制数:
48H。
(4)5090二进制数:
0001001111100010B;十六进制数:
13E2H。
3.4把下列无符号二进制数分别转换为十进制数和十六进制数。
(1)11110000
(2)10000000(3)11111111(4)01010101
答案:
(1)11110000十进制数:
240D;十六进制数:
0F0H。
(2)10000000十进制数:
128D;十六进制数:
80H。
(3)11111111十进制数:
255D;十六进制数:
0FFH。
(4)01010101十进制数:
85D;十六进制数:
55H。
3.5把下列无符号十六进制数分别转换为十进制数和二进制数。
(1)FF
(2)ABCD(3)123(4)FFFF
答案:
(1)FF十进制数:
255D;二进制数;11111111B。
(2)ABCD十进制数:
43981D;二进制数;1010101111001101B。
(3)123十进制数:
291D;二进制数;000100100011B。
(4)FFFF十进制数:
65535D;二进制数;1111111111111111B。
3.6分别用8位二进制数和16位二进制数写出下列十进制数的原码和补码。
(1)16
(2)-16(3)+0(4)-0(5)127(6)-128(7)121(8)-9
答案:
(1)168位二进制数原码:
00010000补码:
00010000;16位二进制数原码:
00000000
00010000补码:
0000000000010000。
(2)-168位二进制数原码:
10010000补码:
11110000;16位二进制数原码:
10000000
00010000补码:
1111111111110000。
(3)+08位二进制数原码:
00000000补码:
00000000;16位二进制数原码:
00000000
00000000补码:
0000000000000000。
(4)-08位二进制数原码:
10000000补码:
00000000;16位二进制数原码:
10000000
00000000补码:
0000000000000000。
(5)1278位二进制数原码:
01111111补码:
01111111;16位二进制数原码:
00000000
01111111补码:
0000000001111111。
(6)-1288位二进制数原码:
无补码:
10000000;16位二进制数原码:
10000000
10000000补码:
1111111110000000。
26
(7)1218位二进制数原码:
01111001补码:
01111001;16位二进制数原码:
00000000
01111001补码:
0000000001111001。
(8)-98位二进制数原码:
10001001补码:
11110111;16位二进制数原码:
10000000
10001001补码:
1111111111110111。
3.7试实现下列转换。
(1)[X]=10111110B,求[X]
(2)[X]=11110011B,求[-X]补原补补
(3)[X]=10111110B,求[X](4)[X]=10111110B,求[X]反原补补
答案:
(1)11000010
(2)00001101(3)11000010(4)10111101
3.8假设两个二进制数A=01101010,B=10001100,试比较它们的大小。
(1)A、B两数均为带符号的补码数
(2)A、B两数均为无符号数
答案:
(1)A、B两数均为带符号的补码数:
A>B
(2)A、B两数均为无符号数:
A<B
3.9下列各数均为十进制数,请用8位二进制数补码计算下列各题,用十六进制数表示
其运算结果,并判断是否溢出,验证教材中所给的判断依据。
(1)90+71
(2)90-71(3)-90-71(4)-90+71(5)-90-(-71)
答案:
(1)90+71=161>127溢出
[90]+[71]=01011010+01000111=10100001=0A1H=[-91]补补补
(2)90-71=19<127无溢出
[90]+[-71]=01011010+10111001=00010011=13H=[19]补补补(3)-90-71=-161<-128溢出
[-90]+[-71]=10100110+10111001=01011111=5FH=[95]补补补(4)-90+71=-19>-128无溢出
[-90]+[71]=10100110+01000111=11101101=0EDH=[-19]补补补
(5)-90-(-71)=-19>-128无溢出
[-90]+[71]=10100110+01000111=11101101=0EDH=[-19]补补补
3.10完成下列8位二进制数的逻辑运算。
(1)11001100∧10101010
(2)11001100∨10101010
(3)11001100⊕10101010(4)10101100∧10101100
(5)10101100⊕10101100(6)10101100∨10101100
(7)10101100
答案:
(1)11001100∧10101010=10001000
(2)11001100∨10101010=11101110
(3)11001100⊕10101010=01100110(4)10101100∧10101100=10101100
(5)10101100⊕10101100=00000000(6)10101100∨10101100=10101100
(7)10101100=01010011
3.11以下均为2位十六进制数,试说明当把它们分别看作无符号数或字符的ASCII码
值,它们所表示的十进制数和字符是什么?
(1)30H
(2)39H(3)42H(4)62H(5)20H(6)7H
答案:
(1)30H所表示的十进制数是:
48D;字符是:
0。
(2)39H所表示的十进制数是:
57D;字符是:
9。
(3)42H所表示的十进制数是:
66D;字符是:
B。
(4)62H所表示的十进制数是:
98D;字符是:
b。
(5)20H所表示的十进制数是:
32D;字符是:
sp空格。
(6)7H所表示的十进制数是:
7D;字符是:
BEL报警。
3.12把以下十进制数分别以压缩BCD码、非压缩BCD码、ASCII码串表示。
26
(1)2
(2)78
答案:
(1)2压缩BCD码:
0010、非压缩BCD码:
00000010、ASCII码:
0110010
(2)78压缩BCD码:
01111000、非压缩BCD码:
0000011100001000、ASCII码:
0110111
011100
3.13设浮点数格式如下图所示:
阶码、尾数均以补码表示,基数为2,求:
+25.6和-361.25的规格化浮点数。
答案:
1)+25.6D=11001.1001100110B=0.110011001100110×25
+5=0101B,补码:
0101,尾数:
[0.110011001100110]=0.110011001100110补规格化浮点数:
000001010110011001100110
2)-361.25D=-101101001.01B=2×(-0.101101001010000)
9+9=1001,补码:
1001,尾数:
[-0.101101001010000]=1.010010110110000补规格化浮点数:
000010011010010110110000
3.14设某计算机用12位表示一个浮点数,该浮点数从高位到低位依次为:
阶符1位、
阶码3位(原码表示)、数符1位、尾数7位(补码表示),则010010110011的真值是多少?
答案:
-9.625
3.158086汇编语言指令的寻址方式有哪几类?
哪种寻址方式的指令执行速度最快?
解:
寻址方式分为:
立即数寻址方式、寄存器操作数寻址方式和存储器操作数寻址方式。
其中,寄存器操作数寻址方式的指令执行速度最快。
3.16在直接寻址方式中,一般只指出操作数的偏移地址,那么,段地址如何确定?
如果要用
某个段寄存器指出段地址,指令中应该如何表示?
解:
默认的数据访问,操作数在DS段;堆栈操作在SS段;串操作源操作数(SI)在DS
段,目的操作数(DI)在ES段;用BP作为指针在SS段。
如果要显式地指定段地址,则在操作
数中规定段寄存器。
例如:
MOVAX,ES:
(BX+10H)
3.178086系统中,设DS=1000H,ES=2000H,SS=1200H,BX=0300H,SI=0200H,
BP=0100H,VAR的偏移量为0600H,请指出下列指令的目标操作数的寻址方式,若目
标操作数为存储器操作数,计算它们的物理地址。
(1)MOVBX,12;目标操作数为寄存器寻址
(2)MOV[BX],12;目标操作数为寄存器间址PA=10300H
(3)MOVES:
[SI],AX;目标操作数为寄存器间址PA=20200H
(4)MOVVAR,8;目标操作数为存储器直接寻址PA=10600H
(5)MOV[BX][SI],AX;目标操作数为基址加变址寻址PA=10500H
(6)MOV6[BP][SI],AL;目标操作数为相对的基址加变址寻址PA=12306H
(7)MOV[1000H],DX;目标操作数为存储器直接寻址PA=11000H
(8)MOV6[BX],CX;目标操作数为寄存器相对寻址PA=10306H
(9)MOVVAR+5,AX;目标操作数为存储器直接寻址PA=10605H
3.18下面这些指令中哪些是正确的?
那些是错误的?
如果是错误的,请说明原因。
(1)XCHGCS,AX;错,CS不能参与交换
(2)MOV[BX],[1000];错,存储器之不能交换
(3)XCHGBX,IP;错,IP不能参与交换
(4)PUSHCS;错,CS不能为PUSH的操作数
(5)POPCS;错,不能将数据弹到CS中
(6)INBX,DX;输入/输出只能通过AL/AX
(7)MOVBYTE[BX],1000;1000大于255,不能装入字节单元
26
(8)MOVCS,[1000];CS不能作为目标寄存器
(9)MOVBX,OFFSETVAR[SI];OFFSET只能取变量的偏移地址
(10)MOVAX,[SI][DI];SI、DI不能成为基址加变址
(11)MOVCOUNT[BX][SI],ES:
AX;AX是寄存器,不能加段前缀
3.19试述以下指令的区别:
⑴MOVAX,3000H与MOVAX,[3000H]
答案:
⑴MOVAX,3000H指令源操作数的寻址方式为立即寻址方式,指令执行结果为:
(AX)=3000H。
而MOVAX,[3000H]指令源操作数的寻址方式为直接寻址方式,指令执行结
果为:
DS:
3000H)_AX。
⑵MOVAX,MEM与MOVAX,OFFSETMEM
答案:
⑵MOVAX,MEM指令源操作数的寻址方式为直接寻址方式,指令执行结果为:
DS:
MEM)_AX。
而MOVAX,OFFSETMEM指令的执行结果是把MEM的偏移量送AX。
⑶MOVAX,MEM与LEAAX,MEM
答案:
⑶MOVAX,MEM指令的执行结果是?
DS:
MEM)_AX。
而LEAAX,MEM
的执行结果是把MEM的偏移量送AX。
(4)JMPSHORTL1与JMPNEARPTRL1
答案:
JMPSHORTL1为段内无条件短程转移,跳转的范围不得超过带符号的8位二进
制数表示的字节范围;JMPNEARPTRL1为段内无条件近程转移,跳转的范围不得超过带
符号的16位二进制数表示的字节范围。
(5)CMPDX,CX与SUBDX,CX
答案:
CMPDX,CX是比较,也是利用减法比较,但是dx中的值不变,标志寄存器改
变。
SUBDX,CX是做减法运算,dx中为减后的值,标志寄存器改变
(6)MOV[BP][SI],CL与MOVDS:
[BP][SI],CL
答案:
BP默认的段基址是SS,物理地址PA=SS+BP+SI;第二个重定义为DS段基址,
物理地址PA=DS+BP+SI
3.20设DS=2100H,SS=5200H,BX=1400H,BP=6200H,说明下面两条指令所进行的
具体操作:
MOVBYTEPTR[BP],20H
MOVWORDPTR[BX],20H
解:
前一条指令是把立即数20H,传送至堆栈段(BP的默认段)偏移量由BP规定的字节单
元,地址为:
52000H+6200H=58200H
第二条指令是把立即数20H,传送至数据段(BX的默认段)偏移量由BX规定的字单元,地
址为:
21000H+1400H=22400H。
3.21设当前SS=2010H,SP=FE00H,BX=3457H,计算当前栈顶的地址为多少?
当执
行PUSHBX指令后,栈顶地址和栈顶2个字节的内容分别是什么?
答案:
当前栈顶的地址=2FF00H
当执行PUSHBX指令后,栈顶地址=2FEFEH
(2FEFEH)=57H
(2FEFFH)=34H
3.22设DX=78C5H,CL=5,CF=1,确定下列各条指令执行后,DX和CF中的值。
(1)SHRDX,1;DX=3C62HCF=1
(2)SARDX,CL;DX=03C6HCF=0
(3)SHLDX,CL;DX=18A0HCF=1
(4)RORDX,CL;DX=2BC6HCF=0
26
(5)RCLDX,CL;DX=18B7HCF=1
(6)RCRDH,1;DX=BCC5HCF=0
3.23设AX=0A69H,VALUE字变量中存放的内容为1927H,写出下列各条指令执行
后寄存器和CF、ZF、OF、SF、PF的值。
AXCFZFOFSFPF
(1)XORAX,VALUE;134EH00001
(2)ANDAX,VALUE;0821H00001
(3)SUBAX,VALUE;F142H10011
(4)CMPAX,VALUE;0A69H10011
(5)NOTAX;F596HXXXXX
(6)TESTAX,VALUE;0A69H00001
3.24设AX和BX中是符号数,CX和DX是无符号数,请分别为下列各项确定CMP
和条件转移指令。
CX值超过DX转移。
AX未超过BX转移。
DX为0转移。
CX值等于小于DX转移。
答案:
(1)CMPCX,DX
JANEXT
(2)CMPAX,BX
JLENEXT
(3)CMPDX,0
JZNEXT
(4)CMPCX,DX
JBENEXT
3.25阅读分析下列指令序列:
ADDAX,BX
JNOL1
JNCL2
SUBAX,BX
JNCL3
JNOL4
JMPL5
若AX和BX的初值分别为以下5种情况,则执行该指令序列后,程序将分别转向何处
(L1~L5中的一个)。
AX=13C6H,BX=80DCH
AX=0B568H,BX=54B7H
AX=42C8H,BX=608DH
AX=0D023H,BX=9FD0H
AX=9FD0H,BX=0D023H
答案:
(1)转L1:
不溢出,转移到L1处;
(2)转L1:
不溢出,转移到L1处;
(3)转L2:
溢出,不转移到L1处,进位CF=0,转移到L2处;
26
(4)转L3:
溢出,不转移到L1处,进位CF=1,不转移到L2处,减法借位CF=0,转移
到L3处;
(5)转L5:
溢出,不转移到L1处,进位CF=1,不转移到L2处,减法借位CF=1,不转
移到L3处,不溢出OF=0,转移到L4处;
3.26用普通运算指令执行BCD码运算时,为什么要进行十进制调整?
具体地讲,在进行
BCD码的加、减、乘、除运算时,程序段的什么位置必须加上十进制调整指令?
解:
因为8086指令把操作数作为二进制数进行二进制运算,要得到正确的BCD结果,需
要进行调整。
在加、减、乘法指令之后加上BCD调整指令,而在除法指令之前先用BCD调
整指令再用除法指令。
3.27在编写乘除法程序时,为什么常用移位指令来代替乘除法指令?
编写一段程序,实
现将BX中的数除以10,结果仍然放在BX中。
解:
用移位指令时,左移l位相当于将操作数乘2,右移1位相当于将操作数除2。
用
移位指令实现一些简单的乘除法程序,比用乘法指令和除法指令进行乘、除运算要快得多。
用除法指令实现:
MOVCL0AH
MOVAX,BX
IDIVCL
MOVBX,AX
3.28串操作指令使用时特别要注意和SI,DI这两个寄存器及方向标志DF密切相关。
请
具体就指令MOVSB/MOVSW、CMPSB/CMPSW、SCASB/SCASW、LODSB/LODSW、
STOSB/STOSW列表说明和SI、DI及DF的关系。
解答:
SIDIDF
MOVSB/MOVSW指出源地
址
指出目的地
址
不带REP重复前缀时,DF=0,每传送一次,SI、
DI加1或加2,DF=1,SI、DI则减1或减2
CMPSB/CMPSW
存放源字
符串首地
址
存放目的字
符串首地址
DF=0,每次比较后,SI、DI加1或加2,CX减
1,DF=1,SI、DI减1或减2,CX减1
SCASB/SCASW无指出字符串
首址偏移量无
LODSB/LODSW作为地址
指针
存放处理结
果
DF=1时,地址作增量修改,DF=0时,地址作减
26
量修改
STOSB/STOSW无存放目的地
址无
3.29用串操作指令设计实现以下功能的程序段:
首先将100H个数从2170H处搬到
1000H处,然后,从中检索相等于VAL中字符的单元,并将此单元值换成空格符。
解答:
START:
MOVAX,DS
MOVES,AX
MOVSI,2170H
MOVDI,1000H
MOVCX,100H
CLD
REPMOVSB
ANOTHER:
MOVDI,1000H
MOVAL,VAL
MOVCX,100H
CLD
AGE:
SCASB
JZFIN
DECCX
JNZAGE
JMPOVER
FIN:
MOVBYTEPTR[DI-1],20H
CMPCX,0
JNZAGE
OVER:
RET
3.30求双字长数DX∶AX的相反数。
答:
NEGDX
NEGAX
SBBDX,0
3.31试对数据段偏移地址为101H单元中的单字节数求补后存入102H,最高位不变,
低7位取反存入103H,高4位置1,低4位不变,存入104H。
答:
MOVAX,[0101H]
MOVBX,AX
MOVCX,AX
NOTAX
MOV[0102H],AX
XORBX,7FH
MOV[0103H],BX
ANDCX,0F0H
MOV[0104H]
3.32试编写一个程序,比较两个同长字符串STRING1和STRING2所含字符是否相同,
26
若相同MATCH单元赋值1,若不相同MATCH单元赋值0。
答案:
程序段为:
;数据定义
STRING1DB‘ABCDEFGHIJK;串1,作为源串
STRING2DB‘ABCDFGKJ;串2,作为目标串
MATCHDB?
;定义MATCH单元
;功能代码
MOVAX,SEGSTRING1
MOVDS,AX;源串段地址送DS
MOVAX,SEGSTRING2
MOVES,AX;目标串段地址送ES
LEASI,STRING1;源串偏移地址送SI
LEADI,STRING2;目标串偏移地址送DI
MOVCX,STRING1-STRING2;重复次数送CX
CLD;地址增
REPECMPSB;相等继续比较,不相等退出
JZEQUAL;退出时,若ZF=1,表示两串相等
MOVMATCH,0;不相同,MATCH单元赋值0
JMPOVER
EQ