80x86前三章答案Word文档格式.docx
- 文档编号:21000571
- 上传时间:2023-01-26
- 格式:DOCX
- 页数:48
- 大小:31.62KB
80x86前三章答案Word文档格式.docx
《80x86前三章答案Word文档格式.docx》由会员分享,可在线阅读,更多相关《80x86前三章答案Word文档格式.docx(48页珍藏版)》请在冰豆网上搜索。
到目前为止,Intel的80X86的成员有:
nameProcessTransistorFrequencyRegisterAddressData
Intel400410mm2300<
740KHz4bit?
?
Intel404010mm?
<
740KHz4bit
intel800810mm3500<
0.8MHz8bit16bit16bit
Intel808010mm?
2MHz8bit16bit16bit
Intel808510mm?
6MHz8bit16bit16bit
Intel8086?
29000<
10MHz16bit20bit16bit
Intel8088?
5MHz16bit20bit8/16bit
Intel80186?
20MHz16bit20bit16bit
Intel80188?
20MHz16bit20bit8bit
Intel802861.5mm134K<
25MHz16bit24bit16bit
Intel803861mm275K<
40MHz32bit32bit32bit
Intel803761mm275K<
20MHz32bit32bit16/32bit
Intel804860.8/1mm1.185M<
100MHz32bit32bit32bit
IntelPentium0.6mm3.2M<
200MHz32bit64bit32bit
IntelPentiumMMX0.35mm4.5M<
300MHz32bit64bit32bit
IntelPentiumPro0.35mm5.5M<
IntelPentiumII
IntelPentiumIII
IntelPentiumIV
第二章答案
Tarzan版
题2.18086/8088通用寄存器的通用性表现在何处?
8个通用寄存器各自有何专门用途?
哪些
寄存器可作为存储器寻址方式的指针寄存器?
8086/8088通用寄存器的通用性表现在:
这些寄存器除了各自规定的专门用途外,他们均可以用于传送和暂存数据,可以保存
算术逻辑运算中的操作数和运算结果;
8个通用寄存器的专门用途如下:
AX字乘法,字除法,字I/O
BX存储器指针
CX串操作或循环控制中的计数器
DX字乘法,字除法,间接I/O
SI存储器指针(串操作中的源指针)
DI存储器指针(串操作中的目的指针)
BP存储器指针(存取堆栈的指针)
SP堆栈指针
其中BX,SI,DI,BP可作为存储器寻址方式的指针寄存器
题2.2从程序员的角度看,8086/8088有多少个可访问的16位寄存器?
有多少个可访问的8位
寄存器?
从程序员的角度看,8086/8088有14个可访问的16位寄存器;
有8个可访问的8位寄存器;
题2.3寄存器AX与寄存器AH和AL的关系如何?
请写出如下程序片段中每条指令执行后寄存器
AX的内容:
MOVAX,1234H
MOVAL,98H
MOVAH,76H
ADDAL,81H
SUBAL,35H
ADDAL,AH
ADCAH,AL
ADDAX,0D2H
SUBAX,0FFH
MOVAX,1234HAX=1234H
MOVAL,98HAX=1298H
MOVAH,76HAX=7698H
ADDAL,81HAX=7619H
SUBAL,35HAX=76E4H
ADDAL,AHAX=765AH
ADCAH,ALAX=D15AH
ADDAX,0D2HAX=D22CH
SUBAX,0FFHAX=D12DH
题2.48086/8088标志寄存器中定义了哪些标志?
这些标志可分为哪两类?
如何改变这些标志
的状态?
8086/8088标志寄存器中定义了9个标志,如下:
CF:
CarryFlag
ZF:
ZeroFlag
SF:
SignFlag
OF:
OverflowFlag
PF:
ParityFlag
AF:
AuxiliaryCarryFlag
DF:
DirectionFlag
IF:
Interrupt-enableFlag
TF:
TrapFlag
这些标志可分为两类,分别为:
1、运算结果标志;
2、状态控制标志;
采用指令SAHF可把AH中的指定位送至标志寄存器低8位SF、ZF、AF、PF、CF;
采用CLC可清除CF,置CF到0
采用STC可置CF到1
采用CLD可置DF到0
采用sTD可置DF到1
采用CLI可置IF到0
采用STI可置IF到1
另外,在某些指令执行过程中会改变部分标志的状态;
题2.5请说说标志CF和标志OF的差异。
如果把指令中处理的数据按照无符号数看待,则处理结果达到进位是,置CF为1;
如果把该处理中的数据按照有符号数看待,则处理结果超过有符号数表达范围的,
置OF为1;
两个标志同步进行,CPU并不知道该数的类型;
题2.68086/8088如何寻址1M字节的存储器物理地址空间?
在划分段时必须满足的两个条件
是什么?
最多可把1M字节空间划分成几个段?
最少可把1M字节地址空间划分成几个段?
8086/8088通过对存储器分段和使用段寄存器的方式寻址1M字节的存储器物理地址空间;
在划分段时必须满足的两个条件是:
1、逻辑段的开始地址必须是16的倍数;
2、逻辑段的嘴道长度是64K;
1M的字节空间划分为64K个逻辑段;
最少可把1M字节地址划分成16个逻辑段;
题2.7在8086/8088上运行的程序某一时刻最多可访问几个段?
程序最多可具有多少个段?
程序至少几个段?
在8086/8088上运行的程序某一时刻最多可访问4个当前段:
代码段,数据段,堆栈段
和附加段;
程序最多可具有4种类型的段,最少要有一个代码段;
题2.8存储单元的逻辑地址如何表示?
存储单元的20位物理地址如何构成?
存储单元的逻辑地址由段值和偏移两部分组成:
段值:
偏移;
存储单元的20位物理地址可以表示为:
物理地址=段值×
16+偏移;
题2.9当段重叠时,一个存储单元的地址可表示成多个逻辑地址。
请问物理地址12345H可表示
多少个不同的逻辑地址?
偏移最大的逻辑地址是什么?
偏移最小的逻辑地址是什么?
12345H可表示1000H(4096)个不同的逻辑地址,偏移最大的逻辑地址是235:
0FFF5H
偏移最小的逻辑地址是1234:
0005H
题2.10为什么称CS为代码段寄存器?
为什么称SS为堆栈寄存器?
因为在取指令的时候,规定的段寄存器就是CS,所以CS为代码段寄存器;
而堆栈操作时规定的寄存器是SS,所以SS为堆栈寄存器;
题2.11请举例说明何为段前缀超越。
什么场合下要使用段前缀超越?
在存取一般存储器操作数时,段寄存器可以不是DS;
当偏移设计BP寄存器时,段寄存器
也可以不必是SS;
如MovAX,[si]默认段地址在DS中,也可以改变:
MovAX,ES:
[si]
当数据并不在默认的DS指定段时,可以采用段前缀超越;
题2.128086/8088的基本寻址方式可分为哪三类?
他们说明了什么?
8086/8088的基本寻址方式可分为以下三类:
1、存储器寻址;
2、立即寻址;
3、寄存器寻址;
他们说明了cpu有三类合计七种方式进行基本寻址;
题2.13存储器寻址方式分为哪几种?
何为存储器的有效地址?
存储器寻址方式分为以下几种:
1、立即寻址;
2、直接寻址;
4、寄存器间接寻址;
5、寄存器相对寻址;
6、基址加变址寻址;
7、相对基址加变址寻址;
存储器的有效地址是一个16bit的无符号数;
题2.14什么场合下缺省的段寄存器是SS?
为什么这样安排?
当使用堆栈时,缺省的段寄存器是SS;
因为SS定义为堆栈段寄存器,配合SP堆栈指针,用来指向堆栈的栈顶;
题2.15请说明如下指令中源操作数的寻址方式,并作相互比较:
MOVBX,[1234H]
MOVBX,1234H
MOVDX,BX
MOVDX,[BX]
MOVDX,[BX+1234H]
MOVDX,[BX+DI]
MOVDX,[BX+DI+1234H]
MOVBX,[1234H];
直接寻址
MOVBX,1234H:
立即寻址
MOVDX,BX:
寄存器寻址
MOVDX,[BX]:
寄存器间接寻址
MOVDX,[BX+1234H]:
寄存器相对寻址
MOVDX,[BX+DI]:
基址加变址寻址
MOVDX,[BX+DI+1234H]:
相对基址加变址寻址
题2.168086/8088提供了灵活多样的寻址方式,如何适当的选择寻址方式?
每种寻址方式都有其特点,首先应该掌握不同寻址方式之间的区别,以及
适用的范围,结合程序中的需要进行灵活选择。
题2.17设想一下这些寻址方式如何支持高级语言的多种数据结构?
自己设想!
题2.18为什么目标操作数不能采用立即寻址方式?
立即寻址表示是一个操作数,并非一个存储空间,作为目标操作数是不合适的;
题2.19处理器的通用寄存器是否越多越好?
通用寄存器不够用怎么办?
处理器的通用寄存器并非越多越好,因为如果处理器的通用寄存器数量太多,势必
造成处理器的成本增加,同时也增加了处理器设计的复杂度;
如果通用寄存器不够用,应该采用内存中的存储单元代替,不过速度上要有所牺牲;
题2.20哪些存储器寻址方式可能导致有效地址超出64K的范围?
8086/8088如何处理这种
情况?
寄存器相对寻址,基址加变址寻址,相对基址加变址寻址这三种寻址方式有可能导致
有效地址超出64K的范围,8086/8088将取其64K的模进行访问;
题2.21什么情况下根据段值和偏移确定的存储单元地址会超出1M?
当物理地址的计算超过FFFFFH时,存储单元地址会超出1M,8086/8088将取其1M的模
覆盖存取;
题2.228086/8088的指令集可分为哪6个子集?
8086/8088的指令集可分为以下6个子集:
1、数据传输
2、算术运算
3、逻辑运算
4、串操作
5、程序控制
6、处理器控制
题2.238086/8088的指令集合中,最长的指令有几个字节?
最短的指令有几个字节?
8086/8088的指令集合中,最长的指令4个字节,最短的指令2个字节;
MOVAX,[BX+SI+1234H]
题2.248086/8088的算术逻辑运算指令最多一次处理多少二进制位?
当欲处理的数据
长度超出该范围怎么办?
8086/8088的算术逻辑运算指令最多一次处理16bit的二进制位;
如果处理的数据
长度超出则分成若干部分进行逻辑运算,最后进行整合;
题2.25如何时序数据段和代码段相同?
将数据段的内容写入代码段中,并将代码段的段值赋给DS即可;
题2.26通常情况下源操作数和目的操作数不能同时是存储器操作数。
请给出把存储器操作
数甲送到存储器操作数乙的两种方法。
法一:
MOVAX,[BX]
MOV[SI],AXDS:
[BX]=甲,DS:
[SI]=乙
法二:
MOVAX,[BX]
XCHGAX,[SI]
法三:
PUSHWORDPTR[BX]
POPWORDPTR[SI]
题2.27请用一条指令实现把BX的内容加上123并把和送到寄存器AX。
LEAAX,[BX+123H]
题2.28堆栈有哪些用途?
请举例说明。
堆栈的用途主要有:
1、现场和返回地址的保护;
MOVAX,OFFSETADDRESS
PUSHAX
JMPXXX
...
RET
2、寄存器内容的保护;
PUSHBX
POPBX
POPAX
3、传递参数;
PUSH[BX]
CALLXXX
XXX:
4、存储局部变量;
PUSHDS
PUSHCS
POPDS
题2.29在本章介绍的8086/8088指令中,哪些指令把寄存器SP作为指针使用?
8086/8088指令
集中,哪些指令把寄存器SP作为指针使用?
以下指令把寄存器SP作为指针使用:
1、PUSH
2、POP
3、PUSHF
4、POPF
5、PUSHA
6、POPA
7、RET
8、CALL
9、RETF
题2.30请说说标志CF的用途。
请至少给出使标志CF清0的三种方法。
CF的用途主要有:
1、配合条件转移语句进行条件转移;
2、配合移位指令实现操作数之间的位转移;
3、常作为子程序的出口参数;
如DOS磁盘文件管理功能调用等;
CF清0的方法:
CLC
ADDAX,0FFFFH
CMPAX,0
题2.31请写出如下程序片段中每条算术运算指令执行后标志CF、ZF、SF、OF、PF和AF的状态。
MOVAL,89H
ADDAL,AL
ADDAL,9DH
CMPAL,0BCH
SUBAL,AL
DECAL
INCAL
INSTRUCTIONCFZFSFOFPFAF
MOVAL,89H000000
ADDAL,AL100111
ADDAL,9DH001010
CMPAL,0BCH101010
SUBAL,AL010010
DECAL001011
INCAL010011
题2.32什么是除法溢出?
如何解决16位被除数8位除数可能产生的溢出?
除法溢出是指除数如果是0,或者在8位除数时商超过8位,或者在16位除时商超过16位,
则认为是除法溢出,引起0中断;
首先要确定8位除数不能为0,其次要确定商的最大值不能超过8位,如果超过8位,则可
采用16位的除法;
题2.33请写出如下程序片段中每条逻辑运算指令执行后标志ZF、SF、PF的状态:
MOVAL,45H
ANDAL,0FH
ORAL,0C3H
XORAL,AL
INSTRUCTIONZFSFPF
MOVAL,45H000
ANDAL,0FH001
ORAL,0C3H010
XORAL,AL101
题2.34“MOVAX,0”可寄存器AX清0。
另外再写出三条可使寄存器AX清0的指令。
XORAX,AX
ANDAX,0
SUBAX,AX
题2.35请写出如下程序片段中每条移位指令执行后标志CF、ZF、SF和PF的状态。
MOVAL,84H
SARAL,1
SHRAL,1
RORAL,1
RCLAL,1
SHLAL,1
ROLAL,1
INSTRUCTIONCFZFSFPF
MOVAL,84H0000
SARAL,10010
SHRAL,10000
RORAL,11000(该命令不影响SF位)
RCLAL,11000
SHLAL,10010
ROLAL,11010
题2.368086/8088中,哪些指令把寄存器CX作为计数器使用?
哪些指令把寄存器BX作为基指针寄存器使用?
8086/8088中,以下指令把寄存器CX作为计数器使用:
1、LOOP
2、LOOPE
3、LOOPZ
4、LOOPNZ
5、LOOPNE
6、JCXZ
以下指令把寄存器BX作为基指针寄存器使用:
1、MOV
2、XCHG
3、LEA
4、LDS
5、LES
6、ADD
题2.37请不用条件转移指令JG、JGE、JL和JLE等指令实现如下程序片段的功能:
CMPAL,BL
JGEOK
XCHGAL,BL
OK:
......
如下命令可实现同样功能:
PUSHCX;
ReserveCX
XORCX,CX;
CX=0
MOVCH,02H;
CH=02H
MOVCL,AL;
CL=AL
MOVBH,0H;
BH=0
SUBCX,BX;
IfCH=2,AL>
=BL;
IfCH=1,AL<
BL
SHRCX,8;
CX=2or1
LOOPOK;
IfCX=2jmptoOK;
IfCX=1ExchangeAL,BL
OK:
POPCX;
RevertCX
......
题2.38段间转移和段内转移的本质区别是什么?
8086/8088哪些指令可实现段间转移?
段间转移和段内转移的本质区别是有没有对CS进行设置,如果设置了新的CS代码寄存器,
程序将转移到另一个段中,即实现了段间转移;
否则CS和原来一致,则在同一代码段中
继续进行,只是IP指针进行了调整,即为段内转移;
8086/8088中如下指令可以实现段间转移:
1.JMPFARPTRLEAEL
2.JMPOPRD
3.CALL
4.RET/RETF
题2.398086/8088的条件转移指令的转移范围有多大?
如何实现超出范围的条件转移?
8086/8088的条件转移指令的转移范围只能从-126到+129之间,如果出现超出
范围的条件转移,要借助无条件转移命令JMP;
题2.40相对转移和绝对转移的区别是什么?
相对转移的有何优点?
相对转移和绝对转移的区别是相对转移记录了目标地址与当前地址的差值,而绝对
转移在转移命令中直接包含了目标地址;
相对转移有利于程序的浮动,比如说增加了命令语句等;
题2.41请指出下列指令的错误所在:
MOVCX,DL
XCHG[SI],3
POPCS
MOVIP,AX
SUB[SI],[DI]
PUSHDH
ORBL,DX
ANDAX,DS
MUL16
AND7FFFH,AX
DIV256
ROLCX,BL
MOVES,1234H
MOVCS,AX
SUBDL,CF
ADCAX,AL
MOVAL,300
JDXZNEXT
MOVCX,DL;
寄存器大小不一
XCHG[SI],3;
不能与立即数进行交换
POPCS;
POP指令的对象不能是CS,PUSH可以
MOVIP,AX;
IP不能是源也不能是目的
SUB[SI],[DI];
如果参与的操作数有两个,只能有一个是存储器操作数
PUSHDH;
PUSH和POP只能处理16位的操作数(8086/8088)
ORBL,DX;
ANDAX,DS;
段寄存器不可以是操作数
MUL16;
不可以使用立即数
AND7FFFH,AX;
立即数不能是目的操作数
DIV256;
ROLCX,BL;
BL不可以作为操作数
MOVES,1234H;
段寄存器为目的时,源不能是立即数,需由通用寄存器转
MOVCS,AX;
代码段寄存器CS不能为目的
SUBDL,CF;
CF是Flag中的一个bit,不能如此
ADCAX,AL;
MOVAL,300;
300超过0FFh,Over8bit
JDXZNEXT;
JCXZ
题2.42请指出如下指令哪些是错误的,并说明原因:
MOV[SP],AX
JMP
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 80 x86 前三章 答案