微机原理及应用(陈继红、徐晨)课后习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
微机原理及应⽤(陈继红、徐晨)课后习题答案
微机原理及应⽤(陈继红、徐晨)课后习题答案
第三章
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。
3.3
答案:
7DH。
(2)255
(3)72
48H。
(4)5090
13E2H。
3.4
答案:
240D
0F0H。
128D
80H。
(3)11111111⼗进制数:255D;⼗六进制数:
0FFH。
(4)01010101⼗进制数:
85D;⼗六进制数:
55H。
3.5把下列⽆符号⼗六进制数分别转换为⼗进制数和⼆进制数。
(1)FF(2)ABCD(3)123(4)FFFF
答案:(1)FF⼗进制数:255D;⼆进制数;
11111111B。
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
(2)-168
00010000
(3)+08
00000000
(4)-08
00000000
(5)1278
01111111
(6)-1288
10000000
(7)1218
:01111001;16位⼆进制数原码
:00000000
01111001补码:0000000001111001。
(8)-98位⼆进制数原码
:10001001补码:11110111;16位⼆进制数原码:10000000
10001001补码:1111111111110111。
3.7试实现下列转换。
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)
答案:
[90]补
[90]补
[-90]补
[-90]补
[-90]补
3.10
8
⊕∧
⊕∨
∧1000∨
⊕0110∧
⊕0000∨
0011
3.11
2
ASCII码
答案:
48D;字符是:
0。
(2)39H所表⽰的⼗进制数是:57D;字符是:
9。
(3)42H所表⽰的⼗进制数是:66D;字符是:
B。
(4)62H所表⽰的⼗进制数是:
(5)20H所表⽰的⼗进制数是:32D;字符是:
sp空格。
(6)7H所表⽰的⼗进制数是:
7D;字符是:
BEL报警。
3.12把以下⼗进制数分别以压缩BCD码、⾮压缩
BCD码、ASCII码串表⽰。
(1)2(2)78
答案:(1)2压缩
BCD码
BCD码
(2)78
BCD码
BCD码
011100
3.13
2,求:
+25.6和
答案:1)
+5=0101B
:0101
2
2)
+9=1001
3.14
12
1位、
阶码
3位(原码表⽰)、数符1位、尾数
7位(补码表⽰
),则
010*********的真值是多少?
答案:-9.625
3.158086汇编语⾔指令的寻址⽅式有哪⼏类?哪种寻址⽅式的指令执⾏速度最快
其中,寄存器操作数寻址⽅式的指令执⾏速度最快。
3.16在直接寻址⽅式中
,⼀般只指出操作数的偏移地址
,那么,段地址如何确定?如果要⽤
某个段寄存器指出段地址
,指令中应该如何表⽰
解:默认的数据访问
,操作数在
DS段;堆栈操作在
SS段;串操作源操作数
(SI)在
DS
段,
ES段;⽤
BP
SS
MOVAX,
ES:
3.178086
DS=1000H
BP=0100H
0600H
(1)
(2)
(3)
(4)
(5)
(6)
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不能参与交换IP不能参与交换
(4)PUSHCS;错,
CS不能为
PUSH的操作数
(5)POPCS;错,不能将数据弹到
CS中
(6)INBX,DX;输⼊
/输出只能通过
AL/AX
(7)MOVBYTE[BX],1000;1000⼤于
255,不能装⼊字节单元
(9)
(10)
(11)
3.19
⑴
答案:⑴
,
果为:
⑵
答案:⑵
DS:MEM) MEM
AX。
⑶
答案:⑶LDS:MEM) LEAAX,MEM的偏移量送AX。
(4)JMPSHORTL1与
JMPNEARPTRL1
3
微机原理及应⽤(陈继红、徐晨)课后习题答案
答案:JMPSHORTL1为段内⽆条件短程转移,跳转的范围不得超过带符号的8位⼆进制数表⽰的字节范围;
16位⼆进制数表⽰的字节范围。
(5)CMPDX,CX与
SUBDX,CX
答案:CMPDX,CX是⽐较,也是利⽤减法⽐较,但是dx中的值不变,标志寄存器改变。
SUBDX,CX是做减法运算,
dx中为减后的值,标志寄存器改变
(6)MOV[BP][SI],CL与
MOVDS:[BP][SI],CL
答案:BP默认的段基址是
SS,物理地址
DS
物理地址
3.20设
DS=2100H
解:
20H,
(BP
)
BP
元,
20H,
(BX
)
BX
,地
址为
3.21
SS=2010H
⾏
PUSHBX指令后,栈顶地址和栈顶
2个字节的内容分别是什么?
答案:当前栈顶的地址
=2FF00H
当执⾏
PUSHBX指令后,栈顶地址
=2FEFEH
(2FEFEH)=57H
(2FEFFH)=34H
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,
(6)RCRDH,1
3.23设
AX=0A69H 1927H
CF、ZF、
(2)
(3)
(4)
(5)
(6)
3.24设
AX和
BX
CX和
DX
CMP
和条件转移指令。
0转移。
CX值等于⼩于
CMPCX,DX
JANEXT
(2)
CMPAX,BX
JLENEXT
(3)
CMPDX,0
JZNEXT
4
微机原理及应⽤(陈继红、徐晨)课后习题答案(4)
CMPCX,
JBENEXT
3.25
JNOL4
JMPL5
若
AX和
BX
5
(L1~L5
AX=13C6H
AX=42C8H
AX=9FD0H
答案:
L1:不溢出,转移到L1处;
(2)转
L1:不溢出,转移到L1处;
(3)转
L2:溢出,不转移到L1处,进位
CF=0,转移到
L3:溢出,不转移到L1处,进位
CF=1,不转移到
L2处,减法借位
CF=0,转移
到
L3处;
(5)转
L5:溢出,不转移到L1处,进位
CF=1,不转移到
CF=1
移到
L3
OF=0
L4处;3.26 BCD
,
BCD
,
解:因为8086
,
BCD结果, BCD
,
现将
BX
10,结果仍然放在
BX中。
解:⽤移位指令时,左移
l位相当于将操作数乘
2,右移
1位相当于将操作数除
2。
⽤
移位指令实现⼀些简单的乘除法程序,⽐⽤乘法指令和除法指令进⾏乘、除运算要快得多。
⽤除法指令实现:IDIVCL
MOVBX,AX
3.28串操作指令使⽤时特别要注意和
SI,DI这两个寄存器及⽅向标志
DF密切相关。
请
具体就指令
MOVSB/MOVSW、CMPSB/CMPSW、SCASB/SCASW、LODSB/LODSW、STOSB/STOSW列表说明和SI、DI及
DF的关系。
解答:
SIDIDF
址
址
不带REP DF=0 SI、
DI加
1或加2,DF=1 1或减
2
存放源字符串⾸地址
DF=0 SI、DI加1或加2,CX减
2,CX减
1
SCASB/SCASW⽆指出字符串
⾸址偏移量
⽆
LODSB/LODSW作为地址
指针
存放处理结
DF=0时,地址作减
量修改
5
微机原理及应⽤(陈继红、徐晨)课后习题答案STOSB/STOSW⽆存放⽬的地址
⽆
3.29⽤串操作指令设计实现以下功能的程序段:⾸先将100H个数从
2170H处搬到
1000H处,然后,从中检索相等于
VAL
CLD
JZFIN
DECCX
JNZAGE
JMPOVER
CMPCX,0
JNZAGE
3.30
DX∶AX
答:
NEGDX
NEGAX
SBBDX,0
3.31试对数据段偏移地址为
101H单元中的单字节数求补后存⼊
102H,最⾼位不变,
低
7位取反存⼊
103H,⾼
4位不变,存⼊104H。
答:
MOVAX,[0101H] MOVBX,AX MOVCX,AX NOTAX
MOV[0102H],AX XORBX,7FH
MOV[0103H],BX ANDCX,0F0H
3.32
STRING1
STRING2
若相同
MATCH
1
MATCH
0。
答案:
6
;
;
CLD REPECMPSB JZEQUAL MOVMATCH,0 JMPOVER EQUAL:MOVMATCH,1 OVER:HLT ;串
1,作为源串
;串
MATCH单元
;源串段地址送
ES
;源串偏移地址送SI
;⽬标串偏移地址送DI
;重复次数送
CX
;地址增
;
;
ZF=1
;
MATCH
;相同
MATCH
1
3.34
,计算
a、b、c
16
位,存⼊
SUM
madb12
mbdb21
mcdb86
mddb150
SUMdw0
assumeds:data,cs:code start:movax,data movds,ax movdh,0
movdl,ma
movah,0
moval,10
mulmb
adddx,ax
mulmc
adddx,ax
movah,0
7
微机原理及应⽤(陈继红、徐晨)课后习题答案moval,20 mulmd
adddx,ax
movSUM,dx
codeends
endstart
3.35
LIST到
LIST+100
BLK到
BLK+100
答案:
DS
ES
SI
DI
CX
CLD;
3.36设
CS:0100H
⑴56H⑵
试写出转向⽬标的物理地址是多少?答:因为
CS:0100H处存放两字节指令JMPSHORTLAB,所以当执⾏该指令时(IP)=0102H
(1)转向⽬标的物理地址是:
(CS)*10H+(IP)+0056H=CS:0058H
(2)转向⽬标的物理地址是:
(CS)*10H+(IP)+0FF80H=CS:0082H;80H对应的负数为
(CS)*10H+(IP)+0078H=CS:0180H
(4)转向⽬标的物理地址是:
(CS)*10H+(IP)+0FFE0H=CS:00E2H;E2H对应的负数为
-1EH(向上转移,负位移量)
3.37不使⽤除法指令,将堆栈段中
10H、11H单元中的双字节带符号数除以8,结果存
⼊
12H、13H单元(注:多字节数存放格式均为低位在前,⾼位在后)。
POPAX POPBX
TESTAX,8000H;测试被除数符号位
MOVCL,3
JZZS;
ZS
JMPOVER
3.38
3030H
16
元中。
答案:
8
IMULBX
3.39
(1)
NEAR的
SUBA
150BH);
(2)SUBA调⽤
NEAR的
SUBB过程(返回的偏移地址为
1A70H);
(3)SUBB调⽤
FAR的
SUBC过程(返回的偏移地址为
1B50H,段地址为
1000H);
SUBB;
(5)从
SUBB返回
SUBA;
(6)从
SUBA返回
MAIN。
请画出每次调⽤或返回时,堆栈内容和堆栈指针变化情况。
答:
150BH
*****
1A70H
150BH ***** 1B50H 1000H 1A70H 150BH ***** (SP) (SP) (SP) 1A70H 150BH ***** 150BH ***** ***** (SP) (SP) (SP) 9
4.1什么是标号?它有哪些属性?
答:标号是⼀种特殊的标识符,它代表代码段中的某个具体位置,它主要⽤于表明转移的⽬标位置。
源程序中的标号都有三种属性:段、偏移及类型。
4.2什么是变量?它有哪些属性?
答:变量名代表存储器中的⼀个数据区的名字。
源程序中的变量有五种属性:段、偏移、类型、长度、规模。
4.3什么是伪指令?什么是宏指令?伪指令在什么时候被执⾏?宏指令在程序中如何被调⽤?
答:伪指令语句是⼀种不产⽣⽬标代码的语句,它仅仅在汇编过程中告诉汇编程序应
以⽤宏名代替那段程序。
在汇编时,要对宏进⾏宏展开,展开的过程是将宏名⽤程序段代替。
4.4汇编语⾔表达式中有哪些运算符?它们所完成的运算是在什么时候进⾏的?
答:汇编语⾔表达式中的运算符有:
算术运算符
+、-、*、/、MOD
逻辑运算符
AND、OR、NOT、XOR
关系运算符
EQ、NE、LT、GT、LT、LE、GE
分析运算符SEG、OFFSET、TYPE、LENGTH、SIZE
属性运算符
PTR、
其它
ORG100H VARBDB34))
22H
34H
47H
4FH
4FH
44H
01H
00H
00H
01H
00H
DS:0102H DS:010DH DS:0103H DS:010EH DS:0104H DS:010FH DS:0105H DS:0110H DS:0106H DS:0112H DS:0108H DS:0113H DS:0109H DS:0114H DS:010AH DS:0115H 00H
78H
56H
12H
01H
64H
00H
64H
00H
4.6
DB1为
10H
3,4。
DB2
DB3 COUNT DB1
解答:
10
D
DB3DW12H
OR有什么差别?这两个操作数分别在什么时候执⾏?解答:(1)指令
ORAX,1234HOR0FFH中的第⼀个
OR是指令系统中的
“或”指令,⽽
第⼆个
OR是表达式中表⽰逻辑
“或”关系的。
(2)指令。