微机原理及应用陈继红徐晨课后习题答案.docx
《微机原理及应用陈继红徐晨课后习题答案.docx》由会员分享,可在线阅读,更多相关《微机原理及应用陈继红徐晨课后习题答案.docx(76页珍藏版)》请在冰豆网上搜索。
微机原理及应用陈继红徐晨课后习题答案
微机原理及应用(陈继红、徐晨)课后习题答案
第三章
8086/8088指令系统和寻址方式习题答案(部分)
3.1总结计算机中十进制、二进制、八进制及十六进制数的书写形式。
123D、0AFH、
77Q、1001110B分别表示什么计数制的数?
答案:
123D、0AFH、77Q、1001110B分别表示十进制、十六进制、八进制、二进制。
3.2字长为
8位、16位二进制数的原码、补码表示的最大数和最小数分别是什么?
答案:
8位原码表示的最大数:
(27-1)、8位补码表示的最大数:
(27-1)、8位原码表示
的最小数:
-(27-1)、8位补码表示的最小数
-27。
16位原码表示的最大数:
(215-1)、16位补码表示的最大数:
(215-1)、16位原码表示的
最小数:
-(215-1)、16位补码表示的最小数
-215。
3.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补码:
111111*********0。
(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。
(7)1218位二进制数原码
:
01111001补码
:
01111001;16位二进制数原码
:
00000000
01111001补码:
0000000001111001。
(8)-98位二进制数原码
:
10001001补码:
11110111;16位二进制数原码
:
10000000
10001001补码:
111111*********1。
3.7试实现下列转换。
1
微机原理及应用(陈继红、徐晨)课后习题答案
答案:
(1)11000010
(2)00001101(3)11000010(4)10111101
3.8假设两个二进制数
(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位二进制数的逻辑运算。
∧∨
⊕∧
⊕∨
∧1000∨1110
⊕0110∧1100
⊕0000∨1100
0011
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码串表示。
(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
+5=0101B,补码
:
0101,尾数:
[
规格化浮点数:
000001010
2
微机原理及应用(陈继红、徐晨)课后习题答案
2)
+9=1001,补码:
1001,尾数:
[
规格化浮点数
:
000010011
3.14设某计算机用
12位表示一个浮点数,该浮点数从高位到低位依次为:
阶符
1位、
阶码
3位(原码表示)、数符
1位、尾数
7位(补码表示
),则
010*********的真值是多少?
答案:
-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,不能装入字节单元
(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指令的执行结果是
LDS:
MEM)_AX。
而
LEAAX,MEM
的执行结果是把
MEM的偏移量送
AX。
(4)JMPSHORTL1与
JMPNEARPTRL1
3
微机原理及应用(陈继红、徐晨)课后习题答案
答案:
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
(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
微机原理及应用(陈继红、徐晨)课后习题答案
(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处;
(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时,地址作减
量修改
5
微机原理及应用(陈继红、徐晨)课后习题答案
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所含字符是否相同,
若相同
MATCH单元赋值
1,若不相同
MATCH单元赋值
0。
答案:
6
微机原理及应用(陈继红、徐晨)课后习题答案
程序段为:
;数据定义
STRING1DB‘ABCDEFGHIJK
STRING2DB‘ABCDFGKJMATCHDB?
;功能代码
MOVAX,SEGSTRING1
MOVDS,AX
MOVAX,SEGSTRING2
MOVES,AX
LEASI,STRING1
LEADI,STRING2
MOVCX,STRING1-STRING2
CLD
REPECMPSB
JZEQUAL
MOVMATCH,0
JMPOVER
EQUAL:
MOVMATCH,1
OVER:
HLT
;串
1,作为源串
;串
2,作为目标串
;定义
MATCH单元
;源串段地址送
DS
;目标串段地址送
ES
;源串偏移地址送
SI
;目标串偏移地址送
DI
;重复次数送
CX
;地址增
;相等继续比较,不相等退出
;退出时,若
ZF=1,表示两串相等
;不相同,
MATCH单元赋值
0
;相同
MATCH单元赋值
1
3.34编写代码
计算
a+10b+100c+20d,其中
a、b、c、d均为单字节无符号数,结果为
16
位,存入
SUM开始的两单元中。
datasegment
madb12
mbdb21
mcdb86
mddb150
SUMdw0
dataends
codesegment
assumeds:
data,cs:
code
start:
movax,data
movds,ax
movdh,0
movdl,ma
movah,0
moval,10
mulmb
adddx,ax
movah,0
moval,100
mulmc
adddx,ax
movah,0
7
微机原理及应用(陈继红、徐晨)课后习题答案
moval,20
mulmd
adddx,ax
movSUM,dx
codeends
endstart
3.35试编写一段程序把
LIST到
LIST+100中的内容传到
BLK到
BLK+100中去。
答案:
程序段为:
MOVAX,SEGLIST
MOVDS,AX;源串段地址送
DS
MOVAX,SEGBLK
MOVES,AX;目标串段地址送
ES
LEASI,LIST;源串偏移地址送
SI
LEADI,BLK;目标串偏移地址送
DI
MOVCX,101;重复次数送
CX
CLD;地址增
REPMOVSB
3.36设
CS:
0100H单元有一条两字节的
JMPSHORTLAB指令,若其中的位移量为:
⑴56H⑵80H⑶78H(4)0E0H
试写出转向目标的物理地址是多少?
答:
因为
CS:
0100H处存放两字节指令
JMPSHORTLAB,所以当执行该指令时
(IP)=0102H
(1)转向目标的物理地址是:
(CS)*10H+(IP)+0056H=CS:
0058H
(2)转向目标的物理地址是:
(CS)*10H+(IP)+0FF80H=CS:
0082H;80H对应的负数为
-80H(向上转移,负位移量)
(3)转向目标的物理地址是:
(CS)