Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226397
  • 博文数量: 45
  • 博客积分: 1850
  • 博客等级: 上尉
  • 技术积分: 473
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-11 10:21
文章分类
文章存档

2006年(17)

2005年(28)

我的朋友

分类:

2006-06-19 20:12:53

Intel公司于1985年正式公布了32位微处理器80386,并由此确定了其32位指令系统的结构,被Intel公司称为英特尔结构,简称IA(Intel Architecture)结构。在32位IA结构中,8086/80186的16位指令仍是最基本、最常用的指令,32位80x86微处理器只是在其基础上支持32位操作数和32位寻址方式,形成了32位扩展指令。
一、32位指令运行环境
32位微处理器全面支持32位数据、32位操作和32位寻址方式。不仅向下兼容8086实地址工作方式,而且增加了80286的保护工作方式,新增了虚拟8086工作方式,可以更好的运行多个实方式程序
    在上电或复位后,32位x86CPU首先初始化为实地址工作方式,简称实方式(Real Mode)。它与8086/80186的工作方式以及80286的实地址工作方式具有相同的基本结构,在实方式下,32位x86 CPU只能寻址1MB物力存储空间,分段最大只能64KB,但是在实方式下,32位x86CPU却可以使用32位寄存器和32位操作数,也可以采用32位的寻址方式。相当于可以进行32位处理的快速8086。由于段的最大为64KB,段基地址和偏移地址都用16位表示,称为“16位段”。
    32位x86CPU由实方式可以进入保护工作方式,简称保护方式(Protected Mode),不仅具有段式管理功能,而且提供了页式存储管理功能,可以更好的支持虚拟存储器。在保护方式下,32位x86CPU才能发挥其全部功能。在保护方式下,32位x86CPU可以使用全部32条地址线,使微处理器可寻址的物理存储器达到4GB,他们的段基地址和段内偏移量都是32位。这样的段称其为“32位段”。Pentium Pro以后的32位x86CPU还可以支持64GB物理存储器。
    在保护方式下,通过设置控制标志,32位x86CPU可以转入虚拟8086工作环境,简称虚拟8086方式(Virtual-8086 Mode)。虚拟8086方式是一个在保护方式下运行的类似实方式的工作环境。虚拟8086方式下,段寄存器的使用与实方式一样,左移4位加16位偏移量得到20位地址。如果采用分页存储管理,在虚拟8086方式下,任务的1MB地址空间可以转移到4GB物理地址的任何位置。这样多个8086程序就可以利用分页机构将各自的逻辑1MB空间映射到不同的物理地址,从而实现共存于主存并行运行。不同于在最高特权层0运行的实方式程序,虚拟8086方式的程序都是运行在最低特权层3下运行。
一寄存器组
32位x86CPU共有7类寄存器,分别是通用寄存器与指令指针、段寄存器、标志寄存器、控制寄存器、系统地址寄存器、调试寄存器和测试寄存器。
1、通用寄存器和指令指针
8个32位的通用寄存器:EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESP,是原来8个16位寄存器的扩展,同时他们也支持原来的8/16为寄存器操作,其命名也与原来的相同。
8个32位通用寄存器都可以保存数据、暂存运算结果,也都可以存放存储器地址用于基址/变址寻址。对比16位x86CPU只有BX/BP/SI/DI可以实现寄存器间接寻址,可见32位通用寄存器更具有通用性。
另外这些通用寄存器还在某些指令中具有特殊用途,主要是:
EAX——运算操作数的累加器
EBX——指向DS段中数据的指针
ECX——串和循环操作的计数器
EDX——I/O端口的指针
ESI——串操作的原操作数指针(DS段)
EDI——串操作的目的操作数指针(ES段)
EBP——指向堆栈中数据的指针(SS段)
ESP——堆栈栈顶指针(SS段)
2、段寄存器
32位x86CPU仍采用分段方法管理存储器,其存储器逻辑地址由“段基地址:段内偏移地址”组成。段寄存器指示段基地址,各种寻址方式确定段内偏移地址。
32位x86CPU段寄存器除原来的四个外:CS/SS/DS/ES,还增加了两个用于数据段的段寄存器:FS/GS,段寄存器的长度未变,还是16位
在实方式和虚拟86方式下,段寄存器保存20位段地址的高16位,左移4位与16位偏移地址相加即可得到20位地址。在保护方式下,16位段寄存器的内容是段选择器,段选择器指向段描述符,由段描述符中取得32位段基地址;32位偏移地址由各种32位寻址方式得到;基地指加上偏移地址就得到32位地址。

3、标志寄存器
32位x86CPU的标志寄存器是32位的EFLAGS,它是原来16位FLAGS寄存器(也称为程序状态字PSW)的32位扩展,如下图,新增的标志主要用于微处理器的控制,通常不用在应用程序中。

NT(D14)——任务嵌套标志(Nested Task)。若NT=1,表示当前执行的任务,嵌套于另一个任务中,待执行完毕时应返回原来的任务。
IOPL(D13D12)——I/O特权层标志(I/O Privilege Level),共2位,编码表示4个特权级别,用来指定任务的I/O操作处于4个特权级别的哪一层。
VM(D17)——虚拟8086方式(Virtual 8086 Mode)。当32位x86CPU处于保护方式时,如果使VM=1置位,32位x86CPU将进入虚拟8086方式。
RF(D16)——恢复标志(Resume Flag)。这个标志与调试寄存器一起使用
AC(D18)——对齐检测标志(Alignment Check)。设置是否在存储器访问时进行数据对齐检测。
VIF(D19)——虚拟中断标志(Virtual Interrupt Flag)。IF中断允许标志的虚拟影像,与VIP连用。
VIP(D20)——虚拟中断挂起标志(Virtual Interrupt Pending)。此标志置位指示有一个中断被挂起。
ID(D21)——CPU识别标志(Identification Flag)。程序如果能够置位和复位这个标志,则表示该微处理器支持CPU识别指令CPUID。
4、其它寄存器
系统地址寄存器——四个表明系统中特殊段地址的寄存器:全局描述符表寄存器GDTR、中断描述符表寄存器IDTR、局部描述符表寄存器LDTR和任务状态段寄存器TR。
控制寄存器——保存着影响系统中所有任务的机器状态:CRn(n=0~4),其中CR0是由80286的机器状态字寄存器MSW扩展而来。
调试寄存器——系统用于进行断点调试:DRn(n=0~7)
测试寄存器——用于控制对分页单元中转换后备缓冲器的测试:TRn(n=3~7)
阅读(4000) | 评论(0) | 转发(0) |
0

上一篇:汇编(三十三)——输入输出程序设计二

下一篇:没有了

给主人留下些什么吧!~~