大家好,欢迎来到IT知识分享网。
目录
32位CPU的指令运行环境
32位微处理器全面支持32位数据、32位操作数和32位寻址方式,而且向下兼容8086实地址工作方式,还新增虚拟8086工作方式,可以更好地运行多个实方式程序。
32位处理器新增保护工作模式,简称保护方式。保护方式提供页式存储功能,利用32位和段基地址和32位的偏移地址,那么可寻址的寻址范围达到了4GB,被称为“32位段”。
寄存器
32位CPU有7类寄存器:除了8086具有的通用寄存器与指令指针、段寄存器和标志寄存器之外,还新增了控制寄存器、系统地址寄存器、调试寄存器,以及测试寄存器。事实上,一般的应用程序依然只使用前三种寄存器,系统程序才使用所有的寄存器。
通用寄存器
原来的通用寄存器被拓展为EAX,EBX,ECX,EDX,ESI,EDI,ESP,EBP。原来的寄存器寻址方式依然有效,但是现在可以使用上面的标号操作整个32位寄存器。对32位寄存器数据进行操作时,依然采用小端方式。
段寄存器
32位CPU除了原有的CS,DS,ES,SS之外,还增加了两个用于数据段的段寄存器FS和GS。
为了和8086的实方式保持兼容,段寄存器的长度依然是16位。
在保护方式下,16位段寄存器的内容是段选择器,段选择器指向段描述符,由段描述符中取得32位偏移地址。也就是16位段寄存器实际上是索引。
标志寄存器
32位的CPU 的标志寄存器是32位的EFLAGS。其中,除了原来16位CPU具有的标志之外,还新增了以下微处理器控制的标志。
- NT:任务嵌套标志。若NT=1,表示当前执行的任务,嵌套于另外一个任务之中
- IOPL:I/O特权层标志,有2位。表示4个特权级别,指定任务的I/O处于的4个特权级别。
- VM:当处于保护模式时,如果使VM=1,将进入虚拟8086模式。
- RF:恢复标志,和调试寄存器一起使用。
- AC:对齐检测标志,设置是否在存储器访问时进行数据对齐检测。
- VIF:虚拟模式的中断允许标志,与VIP连用。
- VIP:虚拟中断挂起标志,指示有一个中断被挂起。
- ID:CPU识别标志。程序如果能够操作这个标志位,说明该微处理器支持CPU识别指令。
其他寄存器
- 控制寄存器:保存影响系统中所有任务的机器状态CRn(n=0~4)。
- 系统地址寄存器:全局描述表符寄存器GDTR,中断描述符表寄存器IDTR,局部描述符表寄存器LDTR和任务状态段寄存器TR。
- 调试寄存器:系统用于进行断点调试的寄存器。
- 测试寄存器:控制对分页单元转换后背缓冲器的测试。
他们具体的作用会在以后使用需要时详细介绍
寻址方式
以下是32位CPU所有的寻址方式
- 立即数寻址
mov eax,h
- 寄存器寻址
mov eax,edx
- 直接寻址
mov eax,[1234h]
- 寄存器间接寻址
mov eax,[ebx]
- 寄存器相对寻址
mov eax[ebx+80h]
- 基址变址寻址
mov eax,[ebx+esi]
- 相对基址变址寻址
mov eax,[ebx+esi+80h]
- 带比例的变址寻址
mov eax,[esi*2]
- 带比例基址变址寻址
mov eax,[ebx+4*esi]
- 基址带位移量带比例变址寻址
mov eax,[ebx+esi*8+80h]
- I/O端口直接寻址
in eax,80h
- I/O端口寄存器寻址
in eax,dx
注意:BP、ESP、EBP的默认访问段寄存器是SS,其他寻址方式都默认使用DS使用段寄存器。另外,在合法的情况下依然可以使用段超越前缀。
32位机器代码格式
在讲解32位机器代码之前,先复习一下16位机器代码的格式。16位机器代码的格式如下:
字节数 | 0/1 | 0/1 | 1/2 | 0/1 | 0/1/2 | 0//1/2 |
内容 | 指令前缀 | 段超越 | 操作码 | mod reg r/m | 位移量 | 立即数 |
32位的机器代码格式如下:
字节数 | 0/1 | 0/1 | 0/1 | 0/1 |
内容 | 指令前缀 | 段超越 | 地址长度超越 | 操作数长度超越 |
字节数 | 1/2 | 0/1 | 0/1 | 0/1/2/4 | 0/1/2/4 |
内容 | 操作码 | mod reg r/m | s-i-b | 位移量 | 立即数 |
地址长度超越:地址超越长度决定了指令中位移量的长度和有效地址计算时产生的的地址偏移长度。在原来的的功能做方式下,默认为0表示偏移4位。
操作数长度超越:一条指令会默认使用16位或者32位操作数,当使用操作数长度前缀后,会改变 位使用另外一种操作数位数类型。
s-i-b:表示带比例因子的变址寻址方式。
以上就是32位机器码格式的所有新增内容。
总结
随着内存的拓张,寄存器结构和32位的机器代码指令都在原有的基础上新增或者改变了不少功能,使得32位CPU相比16位可以完成相比更多复杂的任务和更高的效率。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/143264.html