第一章 80386介绍
80386是一款32位处理器,为多任务操作系统作了优化,为需要很高性能的应用程序而设计。32位寄存器和数据通道支持32位地址和数据原型。处理器可以寻址4G物理存储器和64T(264 字节)虚拟存储器。片上储存期管理部件包括地址转换寄存器,高级多任务固件,保护机制,以及页虚拟存储器。专用的调试寄存器即使在ROM程序中也能够提供数据和代码中断点。
1.1 该手册的组织结构
该书从5个方面阐述了80386的体系结构:
第I部分 - 应用程序
第II部分 - 系统编程
第III部分 - 兼容性
第IV部分 - 指令集
附录
上面的分类一方面取决于体系结构本身,一方面取决于使用这本书的不同方式。入下表所示,后面的2部分旨在作为参考手册来帮组那些致力于在80386上开发软件的程序员。前面的3部分则是理论说明,它们说明体系结构的用途,解释术语和概念,描述那些或与专属用途相关,或与专属体系结构相关的指令。
解释说明 第I部分 - 应用程序
第II部分 - 系统编程
第III部分 - 兼容性
参考 第IV部分 - 指令集
附录
前面的3部分陈述了80386 CPU的执行模式和保护特性。应用特性和系统特性的区别由80386的保护机制决定。保护机制的主要用意在于是操作系统免于应用的干扰;因此,处理器使得一些寄存器和和指令不能被应用程序访问。第I部分讨论的是可以被应用访问的特性;第II部分讨论的特性只能由授权的系统软件或在非保护模式下访问。
80386的处理模式同样控制着可访问的特性。80386有3种处理模式:
1. 保护模式。
2. 实地址模式。
3. 虚拟8086模式。
保护模式是80386处理器的正常的32位环境。在这种模式下,所有的指令和特性均可使用。
上电后处理器即进入实地址模式(经常简称为“实模式”)。实地址模式下,80386看起来像是一个更快速的,增加了一些新指令的8086。大多数80386软件在实地址模式下只是进行一些初始化操作。
虚拟8086模式(也常被称作“V86模式”)是一种动态模式,在这种意思上说,处理器可以频繁,快速的在V86模式和保护模式之间切换。CPU从保护模式进入V86模式去执行8086程序,然后再离开V86模式,进入保护模式继续执行原来的80386程序。
在保护模式下可使用的任何特性在V86模式下对于所有程序来说是一样的。这些特性构成了
第I部分。在保护模式下系统软件可以使用的其他一些特性组成了第II部分。第III部分阐述了实地址模式和V86模式,也包括如何执行一个32位和16位的混合程序。
所有模式下可使用 第I部分-应用程序
只能在保护模式下使用 第II部分-系统编程
兼容模式 第III部分-兼容性
1.1.1 第I部分-应用编程
这部分呈现的是通常被应用程序员使用的特性。
第2章-基本编程模型:介绍了存储器的组织结构模型。定义数据类型。列举应用程序使用的寄存器集合。介绍堆栈。说明字符串操作。定义指令的组成。解释了地址计算。介绍应用程序可能用到的阿中断和异常。
第3章-应用指令集:纵览应用程序经常使用的指令。将指令按照功能分组;例如,字符串指令被分在一组,控制-传输指令被分在另一组。解释指令的概念。关于单个指令的详细介
绍被放到了第IV部分,指令集参考。
1.1.2 第II部分-系统编程
这部分阐述的特性通常被下面的人使用:写操作系统,设备驱动,调试器以及为80386保护模式下应用程序提供支持的其他软件的人。
第4章-系统架构:纵览系统程序员使用的各项特性。介绍在第I部分没有提及的寄存器和数据结构。介绍面向系统的指令以及它们支持的寄存器和数据结构上下文。指出在在哪些章节可以到寄存器,数据结构以及指令的详细信息。
第5章-内存管理:阐述了支持虚拟存储器的数据结构,寄存器以及指令的详细结构,以及段和页的概念。解释了设计者怎样选择存储器的组织模型,从完全线性(“平坦模式”)到使用页和段。
第6章-保护:展开存储器管理特性,包括它应用与断和页时的保护。说明了特权等级,堆栈切换,指针检查以及用户和超级用户模式的实现。多任务的保护被推迟到后面的章节。
第7章-多任务:阐述了硬件如何通过上下文切换和任务间保护来支持多任务。
第8章-输入/输出:揭示I/O特性,包括I/O指令,I/O的保护,以及I/O许可映射。
第9章-异常和中断:解释了80386中断的基本运行机制。中断和异常怎样和保护相联系。讨论了所有可能的异常,列举了触发条件和需要处理的信息,以及异常的恢复。
第10章-初始化:定义了处理器在复位或上电后的状态。说明了为实地址模式和保护模式设置寄存器,标志位以及数据结构。包含一个初始化示例。
第11章-协处理和多处理:解释了支持数字协处理器和共享存储器的多CPU的指令。
第12章-调试:告诉我们怎样使用调试寄存器。
1.1.3 第III部分-兼容性
本书的其他章节基本上把处理器看作是32位机器,为了简单而省略了16操作部件。确实,80386是32位机器,但是它的设计完全支持16位的操作数和寻址。这部分通过对在32位程序中支持16位程序和16位操作数的说明完整的描述了80386的结构特性。所有的3种模式均可执行16位程序:保护模式可以直接执行80286保护模式下的16位程序,实地址模式执行8086
程序和80286实地址模式程序,虚拟8086模式在多任务环境下和其他80386保护模式程序一起执行8086程序。另外,32位和16位模块可以在保护模式下与32位和16位操作混合使用。
第13章-执行80286保护模式代码:在保护模式下,80386完全可以执行80286保护模式代码,因为80286是80386的子集。
第14章-80386实地址模式:说明80386的实地址模式。在这种模式下,80386看起来更像是一个快速的实地址模式下的80286,或增加了新指令的快速8086。
第15章-虚拟8086模式:80386能够快速的在保护模式和虚拟8086模式之间切换。这使其有能力在32位“本地模式”程序之间执行8086的多道程序。
第16章-混合16位和32位编码:即使在同一个程序或任务内,80386也能够混合16位和32位编码。而且,任何给定的模块可以同时使用16位和32位操作数和地址。
1.1.4 第IV部分-指令集
第I,II,III部分给出了指令和体系结构特定细节相关的总体描述,这部分用字母序列出了指
令集,为汇编程序员,编写调试器,编译器,操作系统的人等提供了具体细节。指令介绍包括操作的逻辑描述,对标志位的影响,设置标志位的影响,操作数或地址长度属性的影响,处理器模式的影响以及可能产生的异常。
1.1.5 附录
附录给出了编码表和其他细节,它们被组织成了可以被汇编程序员和系统程序员快速索引的形式。
1.2 其他文献
下面的书籍包含有关80386的其他资料。
● Introduction to the 80386, order number 231252
● 80386 Hardware Reference Manual, order number 231732
● 80386 System Software Writer's Guide, order number 231499程序员和编程员的区别
● 80386 High Performance 32-bit Microprocessor with Integrated Memory
Management (Data Sheet), order number 231630
1.3 符号转换
本手册在描述数据结构,指令助记符,十六进制数以及上标和下标时用了特殊的符号。下标用{}括起来,例如10{2} = 10 以2为基。上标用()加上前面的^来表示,例如,10^(3) = 10的3次幂。复习这些符号有助于以后的阅读。
1.3.1 数据结构格式
在内存数据结构的示例图中,低位地址出现在图示的右边;地址从右至左,从下往上递增。位从右向左依次编号。图1-1举例说明了这种惯例。
1.3.2 未定义位和软件兼容性
在许多寄存器和存储器的布局图中,一些位被标记为未定义。当位标记为未定义(如图1-1所示)时,将来的软件将这些位按未定义来处理对于软件兼容性非常重要。在处理未定义位时软件应该遵循下列规则:
● 在测试含有未定义位的寄存器时,不要依赖这些位的状态。在测试前要屏蔽掉这些未定义位。
● 在将寄存器的值拷贝到另一个寄存器时,不要依赖这些位。
● 不要依赖于保留在已写入未定义位的信息。
● 装载寄存器时,要始终把未定义位按0载入,或以之前存在寄存器中的值重新载入。
注意: 依赖于寄存器中的未定义位将导致软件依赖于80386在处理这些位时的未指定的处理方式。如果将来的处理器使用了未定义位,那么依赖于这些位的软件有不兼容的风险。任何软件都要避免依赖于未定义的80386寄存器位。
1.3.3 指令操作数
当用符号表示指令时,你正在使用的是80386汇编指令集。在这个集合中,指令遵循下面的格式:
标号:前缀 助记符 参数1,参数2,参数3
这里:
● 标号是指令的标识符,后面跟冒号。
● 前缀是一条指令前缀的可选保留名字。
● 助记符暗示指令执行的操作,操作码中的一个保留字。
● 操作数参数1,参数2,参数3为可选项。可以有0-3个参数,取决于指令码。当含有参数时,它们或者是立即数,或者是数据项的标识符。操作数标识符可以是寄存器的保留字,或者在其他程序中声明(在例子中可能没有这种形式),指向数据项。当修改数据的指令中含有两个操作数时,右边的是源操作数,左边的是目的操作数。
例子:
LOADREG: MOV EAX, SUBTOTAL
本例中,LOADREG是标号,MOV是操作码指令助记符,EAX是目的操作数,SUBTOTAL是源操作数。
1.3.4 十六进制数
十六进制数字后面加上H的字符串表示以16为基的数字。十六进制数字从下面的集合中选取(0,1,2,3,4,5,6,7,8,9, A, B, C, D, E, F)。某些情况下,特别是在程序语法例子中,一个前导零会被加在A-F前面。例如,0FH等于十进制的15。
1.3.5 上标和下标
本手册使用特殊的符号来表示上标和下标。下标用{}括起来,例如10{2} = 10 以2为基。上标用()加上前面的^来表示,例如,10^(3) = 10的3次幂。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论