LDT和中断描述符表IDT。
在8086/8088中段的大小只能在16B~64KB的范围内变化,而Pentiuum4可以根据需要在1~1MB或4KB~4GB的范围内变化。 2)从线性地址到物理地址的转换
若控制寄存器CR0中PG=0,也就是说禁止分页,则分段部件送来的线性地址就是物理地址。
进入分页操作后,线性地址由3个字段组成,它们分别是10位页目录索引值DIR、10位页索引值PAGE和12位偏移地址。
分页部件为了实现从线性地址到物理地址的转换,使用了两种表,即页目录表和页表,这两种表都在存储器中,因此进入地址转换时需要读两次存储器。 3.虚拟8086模式 虚拟8086模式,就是指一个系统可以模拟多个8086微处理同时工作。8086模式下应用程序在最低特权级3级上运行。
Pentium4微处理器除了上述3种工作模式外,还支持系统管理模式(SMM)。 2.2.5 任务管理 1.特权级保护
Pentium4向处理器提供了4个特权级(0~3),其中操作系统的核心放在最高特权级0,操作系统的其余部分放在特权级1,应用程序放在最低特权级3,留下特权级2供中间软件使用。 2.数据访问的保护机制
Pentium4微处理器提供了段、页两级存储保护机制。 3.程序的控制转移
程序的控制转移分为任务内的控制转移和任务间的控制转移两种类型。 2.2.6 中断和异常管理 1.外部中断
外部中断仍然包括可屏蔽中断(INTR)和不可屏中断(NMI)两种类型。 2.内部异常
(1)故障(fault) (2)陷阱(trap) (3)中止(abort)
3.中断和异常类型及其功能
80x60微处理器能处理多达256种类型的中断和异常。 2.2.7 总线时序
Pentium微处理器支持多种不同类型的总线周期。按照数据传送方式,可分为单数据传送总线周期和突发式(成组)传送总线周期;而按照总线操作是否访问高速缓存,又可以分为缓存式和非缓存式两种类型。为了进一步提高总线效率,总线周期还可以采用非流水线和流水线两种方式。 1.非流水线存储器读写周期 2.突发式存储器读写总线周期
Pentium微处理器有3种突发式总线周期,即代码读发式数据线填充、存储器读突发式数据线填充和突发式回写。 3.流水线存储器读写总线周期
Pentium微处理通过NA(下一个地址)输入信号来形成流水线总线周期。 2.2.8 Pentium 4微处理器的发展与展望
自从2000年Pentium4微处理器问世以来,Intel公司在以下几个方面做出进一步的努力:
1.Core微结构
(1)使用四路超标量结构 (2)14级指令流水线 (3)128位SIMD执行单元
(4)更高效率的内存管理系统 (5)更智能化的共享L2缓存架构 (6)更先进的节能技术 2.多核技术
多核技术(multi-cor technology)就是在一块物理芯片上集成两个或多个执行内核来增强硬件多线程的能力。 3.虚拟化技术 虚拟化技术(virtualization technology,VT)是采用软件或硬件方法,使单CPU模拟多个CPU,在一个平台上同时运行多个操作系统,并且应用程序可以在相互独立的空间内运行而互不影响,从而显著提高计算机的工作效率。
硬件虚拟化方法就是设计支持虚拟技术的CPU以及配套的芯片组、BIOS和VMM软件,采用专用指令集MX(virtual machine extensions)控制虚拟过程。 4.EM64T与Intel64微处理器
在支持EM64T的微处理器中新增加了8个64位通用寄存器(R8~15)和8个128位SSE寄存器(XMM8~XMM15),并且把原有的通用寄存器全部扩展为64位,大大增强了对SSE、SSE2、SSE3和SSSE3的支持。 5.SIMD技术
(1)SIMD的基本特点
SIMD(single instruction multi data)是一种单指令、多数据技术,指令中操作数由多个紧缩(packed)数据组成,其数据类型可以是字节、字、双字、四字紧缩整型数,也可以是紧缩单精度和紧缩双精度浮点数。 (2)SIMD系列指令简介
SIMD系列指包括MMX(multi-media extended)和流式SIMD扩展(tream SIMD extension)指令SSE、SSE2、SSE3、SSSE3。 2.3 80x86指令系统 2.3.1 指令格式与编码
计算机的指令一般由操作码和一个或多个操作数组成。 2.3.2 寻址方式
寻址方式就是指令中用来说明操作数怎样存放以及如何寻找操作数的方法。80x86指令中涉及的操作有3种:立即操作数、寄存器操作数和存储器操作数。 1.立即寻址
寻址方式是把操作数直接放在指令中,紧跟在操作码之后,因而这种操作数称为立即数。
立即寻址方式常用于给寄存器赋初值,并且只能作为源操作数,不能作为目的操作数。
2.寄存器寻址
这种寻址方式的操作数在8位、16位或32们的通用寄存器中。立即寻址方式和寄存寻址方式所执行的操作均在CPU内进行,所以执行速度比较快。
3.存储器寻址
这种寻址方式的操作数在内存数据区中。当需要访问某存储单元时,应根据指令中提供的逻辑地址,即段地址和偏移量形成的物理地址,然后才能对它进行读写操作。
我们就把这个计算得到的段内偏移量称为有效地址(effective address,EA) 在80x86微处理器中,有效地址可以由以下4种地址分量组合而成。 ①基地址:用来指示某局部存储区的起点。 ②变地址:可以方便地访问数组或字符串。 ③位移量:是上述机器指令中的disp字段。 ④比例因子:是32位寻址方式中特有的一种地址分量,其使用方法见下面的说明。 计算80x86微处理器有效地址的一般方法如下: EA=基地址+(变地址×比例因子)+位移量
下面比较详细地介绍80x86微处理器的几种储器寻址方式。 (1)直接寻址
这是最简单的存储器寻址方式,操作数的有效地址是以8位、16位或32位位移量的形式作为指令的一部分,与操作码一起存放在代码段中。操作数的段基址默认为DS,若要对代码段、堆栈段和附加段中的数据寻址,应在指令中增加段跨越前缀。例如:
MOV AX,[2000H] MOV AX,ES:[2000H]
直接寻址的操作数还可以用变量名的形式给出。例如: BUF DB 12H MOV AL,BUF;
(2)寄存器间接寻址 在这种寻址方式中,存储器操作数的有效地址可以是基址寄存器或变址寄存器中的内容,也可以是基址寄存器和变址寄存器中的内容之和。若单独使用基址寄存器或变址寄存器,则分别称为基址寻址和变址寻址;若同时使用基址寄存器和变址寄存器,则称为基址的寄存器间接寻址。例如: MOV EAX,[BX];基址寻址 MOV EAX,[SI];变址寻址
MOV EAX,[BX][SI];基址加变址寻址,[BX][SI]等效于[BX+SI]
注意,基址加变址的寻址方式中,只能是基址和变址相加,而不能是两个基址寄存器相加或两变址寄存器相加。
若以(E)BP、(E)SP为基地址进行间接寻址,默认的段基址在SS中;而采用其他通用寄存器作为基地址进行间接寻址时,则默认的段基址在DS中。同样,可以采用加段跨越前缀的方法对其他段进行寻址。 (3)寄存器相对寻址 在这种寻址方式中,存储器操作数的有效地址是基址或变址寄存器的内容与指令中指定的位移量之和,也可以是基址寄存器加变址寄存器中的内容与指令中指定的位移量之和。与寄存器间接寻址类似,也有所谓相对的基址寻址、相对的变址寻址以及相对的基址加变址寻址。便如: MOV ECX,[BX+24];相对的基址寻址 MOV ECX,[SI+24];相对的变址寻址
MOV EAC,[BX+SI+24];相对的基址加变址寻址,[BX+SI+24]等效于24{BX}{SI}
(4)寄存器比例寻址
在这种寻址方式中,形成存储器操作数的有效地址可以采用以下3种形式: ①变址寄存器的内容乘以比例因子,再加上位移量,称为比例变址方式。 ②变址寄存器的内容乘以比例因子,再加上基址寄存器的内容,称为基址比例变址方式。
③变址寄存器的内容乘以比例因子,再加上基址寄存器的内容和位移量,称为基址比例变址位移方式。例如:
MOV EAX,X[EDI*4];EA=(EDI)*4+X,其中X是8位或32位位移量 MOV EBX,[EDI*8][EBX];EA=(EDI)*8+(EBX) MOV EAX,X[ESI*4][EBP];EA=(ESI)*4+(EBP)+X,其中X是8位或32位位移量 2.3.3基本指令系统 1.传送指令
传送指令用于寄存器、存储单元或输入/输出端口之间传送数据或地址,除了部分标志传送指令外,这类指令不会影响标志位的状态。但要说明的是:第一,两个段寄存器之间不能直接传送数据;第二,两个存储单元之间不能直接传送数据,两操作数中必须有一个是寄存器或立即数;第三,立即数和段寄存器CS不能作为目的操作数,并且立即数也不能直接传送到段寄存器;第四,操作数的类型和长度必须一致,并且不允许溢出。 (1) 通用数据传送指令
MOV DST,SRC;(DST)←(SRC)
MOVSX DST,SRC ;(DST)←符号扩展(SRC) MOVZX DST,SRC ;(DST)←零扩展(SRC) XCHG DST,SRC;(DST)←→(SRC) BSWAP REG;交换字节顺序
PUSH SRC;(SP或ESP)←(SP或ESP)-2或4,(SP或ESP)←(SRC) POP DST;(DST) ←(Sp或ESP),(SP或ESP)←(SP或ESP)+2或4 PUSHA/PUSHAD;8个16/32位通用寄存器数据依次进栈 POPA/POPAD;8个16/32位数据依次出栈,送通用寄存器 (2)累加器专用传送指令
IN ACC,PORT ;(ACC)←(PORT) OUT PORT,ACC ;(PORT)←(ACC) (3)地址传送指令
LEA REG,SRC ;(REG)←SRC
LDS REG,SRC ;(REG)←(SRC),(DS)←(SRC+2或4) LES REG,SRC ;(REG)←(SRC),(ES)←(SRC+2或4) LFS REG,SRC ;(REG)←(SRC),(FS)←(SRC+2或4) LGS REG,SRC ;(REG)←(SRC),(GS)←(SRC+2或4) LSS REG,SRC ;(REG)←(SRC),(SS)←(SRC+2或4) (3)标志传送指令
LAHF ;(AH)←(FLAGS低字节) SAHF ;(FLAGS低字节)←(AH) PUSHF/PUSHFD ;(FLAGS进栈 POPF/POPFD ;FLAGS出栈 2.算述运算指令
1)加法指令
ADD DST,SRC ;(DST) ←(DST)+(SRC) ADC DST,SRC ;(DST) ←(DST)+(SRC)+CF INC DST ;(DST) ←(DST)+1
XADD DST,SRC ;(TEMP←(DST)+(SRC),(SRC) ←(DST),(DST) ←TEMP AAA ;(AL) ←将AL中的和调整为非组合BCD码 DAA ;(AL)←将AL中的和调整为组合BCD码 2)减法指令
SUB DST,SRC ;(DST)←(DST)-(SRC) SBB DST,SRC ;(DST)←(DST)-(SRC)-CF DEC DST ;(DST)←(DST)-1 NEG DST ;(DST)←0-(DST) CMPDST,SRC ;(DST)-(SRC) CMPXCHG DST,SRC ;若(ACC)=(DST),ZF←1,(DST)←(SRC);否则ZF←0,(ACC)←(DST) CMPXCHG8B DST ;(EDX,EAC)中的数据与DST中指定的64位数据比较
DAS ;(AL)←将AL中的差调整为组合BCD码 AAS ;(AL)←将AL中的差调整为非组合BCD码 3)乘法指令
(1)单操作数乘法指令
MUL SRC ;(AX)或(DX,AX)或(EDX,EAX)←ACC)*(SRC) IMUL SRC ;(AX)或(DX,AX)或(EDX,EAX)←(ACC)*(SRC) (2)双操作数和三操作数乘法指令
IMUL REG,SRC1 ;REG16/32←REG16/32*(SRC1) IMUL REG,SRC2,IMM ;REG16/32←(SRC2)*IMM (3)乘法的ASCII调整指令
AAM(ASCII adjust after multiplication)用于将字节乘法的积转换成两个非组合型BCD码。 4)除法指令
DIV SRC ;(ACC)/(SRC),(AL)或(AX)(EAX)←商,(AH)或(DX)或(EDX)←余数 IDIV SRC ;(ACC)/(SRC),(AL)或(AX)或(EAX)←商,(AH)或(DX)或(EDX)←余数 3.逻辑指令
1)逻辑运算指令
NOT DST ;(DST)←(DST)
AND DST,SRC ;(DST)←(DST)∧(SRC) OR DST,SRC ;(DST) ←(DST)∨(SRC) XOR DST,SRC ;(DST) ←(DST)○(SRC) TEST DST,SRC ;(DST)∧(SRC) 2)位操作指令
(1)测试与置位指令
BT DST,SRC ;检查DST中由SRC指定的位,并将其复制到CF中