intel386中文译稿(转)

来源:互联网 发布:阿里云 http服务器 编辑:程序博客网 时间:2024/05/18 01:58

第1章 80386 概览
80386 是先进的32位微处理器 , 对多任务系统做了特别优化 , 也是为要求很高表现的程序应用而设计 . 32位的寄存器和数据线支持32-bit地址和数据类型. 处理器可以实现4G的硬编址和64T(2^64)的虚拟编址.芯片上的内存管理功能包括 : 地址转换寄存器 , 高级的多任务硬件 , 保护机制 和 虚拟分页. 特殊的调试寄存器(debugging registers)提供:  数据代码中断点(breakpoints)即使是基于只读存储器的软件(ROM-based software)
1.1  本手册的组织方式
本书分五部分对80386进行介绍.
   1    -------   应用程序编程.
   2    -------   系统编程
   3    -------   兼容性
   4    -------   指令集合
   5    -------   附录
这样划分是有结构自身决定的,在书中本书会对不同部分进行交*引用. 如下表示 ,后面两章是程序员为80386编程时打算引用的 ; 而前三部分是解释部分, 是对术语  概念 和体系的解释 , 是对某些指令用于特殊目的的描述 或者 详细描述体系结构特色.
解释部分                   1  -------------  应用程序编程
2 -------------  系统编程
3 -------------  兼容性
引用部分                   4   -------------  指令集合
                           附录
应用程序和系统程序的区别是基于保护机制 . 保护模式的一个设计目标是阻止应用程序对操作系统造成影响. 所以, 处理器可以使某些的寄存器和指令对应用程序来说是不可访问的. 在第一部分讨论的特性是对应用程序开放的 ; 第二部分的特性只对有特殊权限的系统程序可见.
处理器的状态决定了哪些特点(features)是可使用的(accessible). 80386有三种处理模式(processing mode) :
1. 保护模式(Protected mode)
2. 实地址模式(Real - Address Mode)
3. 虚8086模式(Virtual 8086 Mode)

保护模式是80386自然态模式 , 此时是32-bit环境(natural 32-bit environment of the 386 processor.) . 在此模式下,所有指令和功能是可见的.
实地址模式(经常叫为实模式): 是在处理器从置(RESET)时的所处模式 . 在实模式时, 80386呈现给程序员的是加入了一些新指令的快速8086处理器 . 大部分80386程序仅仅在初始化时使用该模式.
虚 8086模式(也叫V86模式)是个动态的模式,感觉上是 : 在V86和保护模式见重复/快速的切换 . 当CPU从保护模式进入V86模式时是为了运行8086程序 , 当运行完毕, CPU又从V86模式切换回保护模式, 继续运行本地80386程序(native 80386 program).
在保护模式和V86模式中使用的功能是一样的. 这些功能描述构成了第一章的内容. 其他的功能描述构成了第二章内容,这些功能是系统软件可使用的 (available to systems software) .第三章解释了实模式和V86模式, 而且告诉用户如何运行32位和16位的混合程序.

在所有模式都可用                Part 1  -----  应用程序
只是在保护模式可用              Part 2  -----  系统程序
兼容性                          Part 3  -----  兼容性


第1章 应用程序
本部分的各个方面可以被应用程序自由使用。
Chapter 2- 基本程序模型 :介绍了内存组织的模型。定义数据类型。寄存器设置。介绍栈。解释字符串操作。定义指令的各个部分。介绍地址计算法则。介绍中断和异常,他们可能会在应用程序设计中使用。
Chapter 3 ─ 应用软件的指令集合:考察经常在应用程序中使用的指令。考虑各种指令的功能。比如,字符串指令,控制转移指令。解释与指令相关的概念。到第四章才提到的指令的细节,指令集引用。
1.1.2 系统编程
本部分是对写操作系统、驱动程序、调试程序等的程序员准备的。
Chapter 4 ─系统结构:考察系统程序员要用到的80386的各种特性。介绍未在第一章介绍的寄存器和数据结构,介绍面向操作系统的各种指令。
Chapter 5 ─记忆体管理:展现数据结构的细节、寄存器和支持虚拟存储器的指令,段的概念和分叶机制。解释操作系统设计者从线性的内存管理到完全的分叶和段。
Chapter 6 ─保护:解释特权规则的实现,栈选择,指针,用户和超级模式。
Chapter 7 ─多任务:解释80386是如何硬件实现支持多任务的
Chapter 8 ─I/ 展示80386的I/O,包括I/O指令,和I/O相联系的保护机制。
Chapter 9 ─异常和中断:解释80386的中断机制。展示异常、中断与保护模式间的联系。讨论所有可能的异常
Chapter 10 ─ 初始化:定义在处理器复位或启动时的状态。解释了如何为实模式或保护模式建立寄存器、标志和数据结构。并包括了一个初始化程序。
Chapter 11 ─多处理器:解释了支持多处理器共享内存的指令、标志。
Chapter 12 ─调试:告诉用户如何使用调试寄存器。

1.1.3 Part III ── 兼容性(Compatibility)
其他部分主要是把386处理器看成32-bit的机器,忽略了他的16-bit特性。确实,80386是32-bit的处理器,但是他的设计也完全支持 16-bit的操作数和寻址方式。本部分介绍支持16-bit程序设计的各个方面的信息。三种处理器模式可以被用来运行16-bit的程序:保护模式可以直接运行原来16-bit的80286保护模式的程序,实模式可运行8086和80286的实模式程序,而且虚拟的8086模式可以和其他的80386程序共同运行在多任务的环境里。此外,32-bit 和16-bit模块和分开的32-bit/16-bit操作可以混合使用在保护模式下。

Chapter 13 ─ 运行880286保护模式代码:在保护模式下,80386完全可以运行基于80286保护模式的编写的系统,因为80286的指令系统是80386的指令子集。

Chapter 14 ─80386的实模式:解释80386的实模式。在这个模式下80386是作为一个快速的80286实模式或者增强指令式的8086。
Chapter 15 ─虚拟8086模式:80386可以在它的保护模式与V86模式间快速切换,使它具备它运行8086/80386程序的能力。
Chapter 16 ─混合的16-bit/32-bit代码:在程序模块中,可以混合使用8086/80386指令。

1.1.4 Part IV ── 指1.1.5 令集合(Instruction Set)
本部分,按字母序给出各种指令的细节,这些内容是对于:汇编语言程序员、调试、编译器作者、操作系统作者等必需的。指令描述包括的内容:指令的算法描述,设置标志位会产生的影响(标志、操作数、地址属性、处理器模式和可能出现的异常)。

1.1.6 附录
1.2 相关的内容
下面的材料包括了80386其他的信息。
  ●  Introduction to the 80386, order number 23 252
  ●  80386 Hardware Reference Manual, order number 23 732
  ●  80386 System Software Writer's Guide, order number 23 499
  ●  80386 High Performance 32-bit Microprocessor with Integrated Memory
     Management (Data Sheet), order number 231630

1.3 符号约定(Notational Conventions)
  10{2}表示  二进制的 ‘ 10‘
  10^3 表示 10的3次方

1.3.1 数据结构格式(Data-Structure Formats)


地址增加的方向是从右向左、从下到上。
Bit位的编址是从右到左。  如图所示。

1.3.2 未定义的位 和软件兼容性
在许多寄存器和记忆体视图描述中,有些是没有定义任何意义的位。当存在某些没有定义的位时,它对扩充未来处理器和保持软件兼容性是意义重大的。软件设计者应该遵循下面的规则。

● 当要测试寄存器的值时,● 不● 要基于那些未定义的位信息。在开始测试前把没有定义的位屏蔽掉。
● 当把一些信息存入内存或寄存器时,● 这些信息不● 要是有由基于未定义的位信息组成。
● 不● 要依*那些把信息保留在未定义位上的能力。
● 当装载一个寄存器时,● 总是把那些未定义的位信息填充成0或者用先前寄存器中的值来填充他们。

注意: 依*那些没有定义的寄存器位,将使软件建立在不明确的行为上,这些行为是80386的保留行为(不可以预知的)。依*未定义的位信息,将使软件对未来的处理器变成不可以兼容的。  避免软件依*未定义的位信息!!

1.3.3 指1.3.4 令操作数
当指令用符号表示时,就是80386汇编语言的子集。在这个子集中,一个指令具有下面的格式:

label: prefix mnemonic argument1, argument2, argument3

指令格式说明:

● ‘label‘ 是一个标● 识符,● 结尾跟一个冒号。
● ‘prefix’是一个可选的、保留的名● 字
● ‘mnemonic’助记符,● 是具有相同● 功能的操作的名● 字
●  ‘argument , argument2, and argument3’ 是可选择的。这里可能有0 - 3 个操作符,● 具体情况要看具体指● 令。当两个操作符出现在指● 令中时,● 右边的操作数是‘源操作数’ 左边的是‘目的操作数’; 操作数可能是寄存器也可能是程序中其他被声明的数据项,● 操作数既有字面上的意思,● 也可以指● 代数据项。
For example:
        LOADREG: MOV EAX, SUBTOTAL
在这个示例中, ‘LOADREG’是一个‘label’, ‘MOV’是一个指令的助记符号,‘EAX’是目的操作数 , ‘SUBTOTAL’是源操作数。

1.3.5 16进制
(很简单,就是平时老师讲过的内容,未翻译
0,1,2,3,4,5,6,7,8,9,
A,B,C,D,E,F 
0FH == 15{10})


PART I    应用程序编程

Chapter 2  Basic Programming Model
本章描述80386编程环境,当处理器运行在保护模式下,就是汇编程序员看到的工作环境。本章向程序员介绍下面的特性:80386的结构直接影响到80386应用程序的设计和实现。其他章节将介绍那些影响到系统级程序设计的处理器特性 和 怎样与8086族系的处理器保持兼容。
基本的编程模型包括下面几个方面:
● 内存组织和段 (Memory organization and segmentation)
● 数据类型(Data types)
● 寄存器(Registers)
● 指● 令格式(Instruction format)
● 操作数的选择(Operand selection)
● 中断和异常(Interrupts and exceptions)

请注意:I/O不包括在基本编程模型中。操作系统作者会选择把I/O指令提供给应用程序使用 或者 把这些功能保留给操作系统。由于上述原因,I/O特性将在第二部分讨论。

2.1 内存组织和段
80386系统的物理内存被组织成一个8-bit的字节序列。每个字节被赋予一个独一无二的地址,地址从0―― (2^32)-1(4 gigabytes)
80386程序是独立于物理地址空间的。上面那句话的意思是:程序不需要知道具体由多大的物理内存可以使用,也不需要知道指令或数据具体会被装载到物理内存的什么位置。
操作系统作者将决定应用程序设计者所看到的内存组织。80386的架构使设计者自由选择模式。处理器的组织可以在下面的模式间过渡(range between the following extremes)。
● 平滑地址空间("flat" address space) 由最高地址到4G的单一序列构成。
● A segmented address space consisting of a collection of up  p23


第17章  指令集合
本章按照字母表的顺序介绍80386指令集合. For
each instruction, the forms are given for each operand combination,
including object code produced, operands required, execution time, and a
description. For each instruction, there is an operational description and a
summary of exceptions generated.

17.1 Operand-Size and Address-Size Attributes
当运行一个指令,80386可以用32-bit/16-bit对记忆体编址。所以,每个使用记忆体地址的指令都会涉及到地址大小性质(16-bit/32- bit)。16-bit编址暗示了两种应用:指令中16-bit替换 和 16-bit的地址偏移,上述是有效地址计算的结果。32-bit地址暗示了类似的应用。类似的,当用到双字(16 bits)和四字(32-bits)也有16/32bits的属性。
默认、指令预设和在段描述中的尺寸定义决定了指令的属性。
17.1.1 默认的段属性