2. 8086CPU中有几个通用寄存器,有几个变址寄存器,有几个地址指针寄存
器?它们中通常哪几个寄存器可作为地址寄存器使用?
答:(1)、有4个通用寄存器AX、BX、CX、DX,有2个变址寄存器SI、
DI,有2个地址指针寄存器SP、BP。
(2)、BX、BP、SI、DI四个寄存器可作为地址寄存器使用。 3. 8086CPU的标志寄存器中有哪些标志位?它们的含义和作用是什么?
答:(1)、有6个状态标志位CF、OF、ZF、SF、AF、PF;3个控制标志位
DF、IF和TF。
(2)、状态信息由中央处理机根据计算机的结果自动设置,6位状态位的
意义说明如下:
OF(OverFlag)溢出标志:带符号数计算溢出时为1;
SF(SignFlag)符号标志:运算结果为负时为1,取最高有效位; ZF(ZeroFlag)零标志:运算结果是0为1; CF(CarryFlag)进位标志:运算结果有进位为1;
AF(AuxiliaryFlag)辅助进位标志:第3位有进位置1(半字节); PF(ParityFlag)奇偶进位标志:运算结果中1的个数位为偶数置1。 (3)、控制信息由系统程序或用户程序根据需要用指令设置:
DF(Direction Flag)方向标志:DF为1,SI、DI减量,由高地址 向低地址处理;DF为0,SI、DI增量,由低地址向高地址处理;
IF(Interupt Flag )中断标志: IF为1时允许中断; TF(Trap Flag)陷阱标志( 又叫跟踪标志):每执行一条指令就引起一个内部中断。用于单步方式操作,TF为1,指令执行完后产生陷阱,由系统控制计算机;TF为0,CPU不产生陷阱,正常工作。 4. 简述最小模式和最大模式的含义及其区别。
5. 8086CPU的地址线有多少位?其寻址范围是多少?
答:(1)、8086CPU的地址线有20位;
(2)、其寻址范围是1MB。地址范围为:00000~FFFFFH。 6. 8086CPU工作在最小模式时,
(1) 当CPU访问存储器时,要利用哪些信号? (2) 当CPU访问外部设备时,要利用哪些信号?
(3) 当HOLD有效并得到响应时,CPU的哪些信号是高阻?
7. 8086CPU工作在最大模式时,S2、S1、S0在CPU访问存储器与CPU访问
外部设备时,分别是什么状态?
8. 在8086最大模式系统中,8288总线控制器的作用是什么?它产生哪些控制
信号? 9. 8086采用什么方式管理内存?1MB的内存空间分为哪两个存储体?它们如何与地址总线、数据总线相连?
答:(1)、8086采用分段方式管理内存;
FFFFF FFFFD 5 3 FFFFE FFFFC 4 2 A19~A1 D15~D8BHE D7~D0 A0 高(奇)位和低(偶)位存储器条
(2)、1MB的内存空间分为偶地址和奇地址两个存储体; (3)、如右图所示:
10. 什么是段基址、偏移地址和物理地址?它们之间有什么关系?
答:(1)、段基址:存储器分段时,每个段的起始地址的低4位为0,高16
位为段基址,放入段寄存器中;
偏移地址:段内某内存单元的物理地址相对于段起始地址的偏移量称为
段内偏移地址,也叫有效地址;
物理地址:8086/8088有20条地址线,最大内存容量为1MB(220),其
中任何一个内存单元都有一个唯一的20位的地址,称为内存单元的物理地址。
(2)、物理地址(PA)=段基址×10H+偏移地址(EA) 11. 对于8086,已知(DS)=1050H,(CS)=2080H,(SS)=0400H,(SP)=2000H,问:
(1) 在数据段中可存放的数据最多为多少字节?首地址和末地址各为多少? (2) 堆栈段中可存放多少个16位的字?首地址和末地址各为多少? (3) 代码段最大的程序可存放多少字节?首地址和末地址各为多少?
(4) 如果先后将FLAGS、AX、BX、CX、SI和DI压入堆栈,则(SP)=?如果此时(SP)=2300H,则原来的(SP)=?
答:(1)、64KB;首地址为1050:0000H,末地址为1050:FFFFH。
(2)、1000H 个16位的字;首地址为0400:0000H,末地址为0400:1FFEH。 (3)、64KB;首地址为2080:0000H,末地址为2080:FFFFH。 (4)、(SP)=2000H-12=1FF4H;原来的(SP)=2300H+12=230CH 12. (3)、如右图所示:对于8086,当(CS)=2020H时,物理地址为24200H,则
当(CS)=6520H时,物理地址应转移到什么地方? 13. 什么是总线周期?什么是时钟周期?一个典型的总线周期最小包括几个时
钟周期?什么情况下需要插入等待周期TW?
答:(1)、总线周期:总线接口部件完成一个取指令或传送数据的完整操作所
需的最少时钟周期数。
(2)、时钟周期:CPU输入的CLK时钟信号。 (3)、4。 (4)、当被写入数据或者被读取数据的外设或存储器不能及时地配合CPU
传送数据。这时,外设或存储器会通过“READY”信号线在T3状态启动之前向CPU发一个“数据未准备好的信号”,于是CPU会在T3之后插入一个或多个附加的时钟周期TW。 14. 总线周期中每个T状态的具体任务是什么?
15. 试画出8086最小模式下将内存单元50326H的内容55H读入AL的时序图。 16. 简述微处理器的发展历程。
17. 什么是超标量结构?什么是超级流水线?
18. 什么是SIMD?什么是SSE? 19. 什么是Intel的虚拟化技术?
20. Intel高级智能高速缓存技术有什么特点? 21. 简述超线程技术和多核技术,它们有什么区别?
第 3 章 寻址方式和指令系统
1. 什么叫寻址方式?8086CPU有哪几种寻址方式?
2. 指出下列指令中源操作数和目的操作数的寻址方式:
(1)MOV AX, 0AH (2)ADD [BX], DX (3)PUSH CS (4)POP DS (5)MUL BL (6)MOV DX,[1200H] (7)MOVSB (8)SUB AX,5[BP+DI] 答:(1)、DEST为寄存器寻址,SRC为立即数寻址。
(2)、DEST为寄存器间接寻址,SRC为寄存器寻址。
(3)、DEST为隐含堆栈指针寄存器间接寻址,SRC为寄存器寻址。 (4)、DEST为寄存器寻址,SRC为隐含堆栈指针寄存器间接寻址。 (5)、DEST为隐含寻址,SRC为寄存器寻址。
(6)、DEST为寄存器寻址,SRC为存储器直接寻址。
(7)、DEST为附加段存储器DI隐含寻址,SRC为数据段存储器SI隐
含寻址。(串传送)
(8)、DEST为寄存器寻址,SRC为基址变址相对寻址。 3. 在直接寻址方式中,一般只指出操作数的偏移地址。试问:段地址如何确定?
如果要用某个段寄存器指出段地址,指令应如何表示? 答:(1)、段地址默认为是DS的内容。
(2)、用短跨越前缀指出段地址。指令中用“段寄存器:”表示。 4. 当用寄存器间接寻址方式时,试问:BX、BP、SI、DI分别在什么情况下使用?它们的物理地址如何计算? 5. 分别指出下列指令中源操作数和目的操作数的寻址方式。若是存储器寻址,
试写出其有效地址和物理地址。设(DS)=6000H,(ES)=2000H,(SS)=1500H,(SI)=00A0H,(DI)=6010H,(BX)=0800H,(BP)=1200H,数据变量VAR为0050H。
(1) MOV AX, 3050H (2) MOV DL, 80H (3) MOV AX, VAR (4) MOV AX, VAR[BX][SI] (5) MOV AX, [BX+25H] (6) MOV DI, ES:[BX] (7) MOV DX, [BP] (8) MOV BX, 20H[BX] (9) AND AX, BX (10) MOV BX, ES:[SI]
(11) ADC AX, [BX+DI] (12) PUSH DS 答:(1)、DEST为寄存器寻址,SRC为立即数寻址。
(2)、DEST为寄存器寻址,SRC为立即数寻址。 (3)、DEST为寄存器寻址,SRC为直接寻址。
EA=0050H,PA=(DS)×10H+EA=60050H
(4)、DEST为寄存器寻址,SRC为基址变址相对寻址。
EA=0050H+0800H+00A0H=08F0H,PA=(DS)×10H+EA =608F0H (5)、DEST为寄存器寻址,SRC为寄存器相对寻址。
EA=0800H+25H=0825H,PA=(DS)×10H+EA =60825H (6)、DEST为寄存器寻址,SRC为寄存器间接寻址。
EA=0800H,PA=(ES)×10H+EA =20800H
(7)、DEST为寄存器寻址,SRC为寄存器间接寻址。
EA=1200H,PA=(SS)×10H+EA =16200H
(8)、DEST为寄存器寻址,SRC为寄存器相对寻址。
EA=20H+0800H=0820H,PA=(DS)×10H+EA =60820H (9)、DEST为寄存器寻址,SRC为寄存器寻址。
(10)、DEST为寄存器寻址,SRC为寄存器间接寻址。
EA=00A0H,PA=(ES)×10H+EA =200A0H
(11)、DEST为寄存器寻址,SRC为基址变址寻址。
EA=0800H+6010H=6810H,PA=(DS)×10H+EA =66810H
(12)、DEST为隐含堆栈指针寄存器间接寻址,SRC为寄存器寻址。
EA=(SP)-2,PA=(SS)×10H+EA 6. 设堆栈指针SP的初值为2300H,(AX)=5000H,(BX)=4200H。执行指令
PUSH AX后,(SP)=?,再执行指令PUSH BX及POP AX之后,(SP)=? (AX)=? (BX)=?
答:(1)、(SP)=22FEH。
(2)、(SP)=22FEH,(AX)=4200H,(BX)=4200H。 7. 试说明指令MOV BX,15[BX]与指令LEA BX,15[BX]的区别。
答:指令MOV BX,15[BX]是读取数据段偏移地址为((BX)+0FH)的内容
送到BX中。指令LEA BX,15[BX]是取该偏移地址值(BX)+0FH送到BX中。 8. 已知(DS)=2000H,有关的内存单元值为(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,位移量COUNT=1200H。执行下列指令后,寄存器AX、BX、SI的值分别是多少? MOV BX,OFFSET COUNT MOV SI,[BX]
MOV AX,COUNT[SI][BX]
答:(AX)= 3040H,(BX)= 1200H,(SI)= 1000H。 9. 设标志寄存器值原为0401H,AX=3272H,BX=42A2H。执行下列减法指令SBB AL,BH之后,AX和标志寄存器的值分别是多少? 答: (AX)= 322FH,(FR)= 0410H。
10. 设若标志寄存器原值为0A11H,SP=0060H,AL=4。下列几条指令执行后,
标志寄存器、AX、SP的值分别是多少? PUSHF LAHF
XCHG AH,AL PUSH AX SAHF POPF
答:(FR)= 0411H,(AX)= 0411H, (SP)= 005EH。 11. 指出下列指令的错误
(1) ADD SI,CL (2) MOV 50,AL (3) MOV CS, AX (4) MOV DS,1234H (5) SHL AX,05H (6) XCHG 200,AL (7) IN AX,378H (8) JNZ BX (9) MOV AH,CX (10) MOV 33H,AL (11) MOV AX,[SI][DI] (12) MOV [BX],[SI] (13) ADD BYTE PTR [BP],256 (14) MOV DATA[SI],ES:AX (15) JMP BYTE PTR [BX] (16) OUT 230H,AX (17) MOV DS,BP (18) MUL 39H 答:(1)、SI,CL字长不同。
(2)、DEST不能为立即数50。
(3)、DEST不能为CS段寄存器寻址。 (4)、立即数不能直接送段寄存器。 (5)、多次移位必须要用CL指出来。
(6)、DEST不能为立即数200(交换指令不能有立即数寻址)。 (7)、端口地址超过0FFH必须要用DX寄存器间接寻址。
(8)、条件转移指令只能用短内直接短转移寻址,不能用寄存器寻址。 (9)、AH,CX字长不同。
(10)、DEST不能为立即数33H。
(11)、SRC可为基址变址寻址。但不能为变址变址寻址。 (12)、双操作数指令不能同时为存储器寻址方式。 (13)、字长不同:256不是字节长度了。
(14)、段跨越前缀应放在存储器操作数或整个指令的前面。 (15)、JMP指令的寻址方式不能为字节属性。
(16)、端口地址超过0FFH必须要用DX寄存器间接寻址。 (17)、指令正确。
(18)、8086的乘法指令不能为立即数。 12. 若内存单元DATA在数据段中偏移量为24C0H处,24C0~24C3H单元中依
次存放着55H、66H、77H、88H。下列几条指令执行后,寄存器AX、BX、CL、SI、DS的值分别是多少? MOV AX, DATA LEA SI, DATA MOV CL, [SI]