寄存器
(一)通用寄存器
| 名称 | 符号 |
|---|---|
| 32位通用寄存器 | EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP |
| 16位通用寄存器 | AX、BX、CX、DX、SI、DI、BP、SP |
| 8位通用寄存器 | AH、AL、BH、BL、CH、CL、DH、DL |
(二)专用寄存器
| 名称 | 符号 |
|---|---|
| 标志寄存器 | EFLAGS |
| 指令指针寄存器 | EIP |
| 段寄存器 | CS、DS、SS、ES、FS、GS |
1、标志寄存器(EFLAGS)
分为:状态标志(处理器最基本的标志)、控制标志、系统标志
- 状态标志:记录指令执行结果的辅助信息
- 控制标志:方向标志DF,仅用于串操作指令
- 系统标志:控制操作系统或核心管理程序的操作方式
2、指令指针寄存器(EIP)
作用:保存将要执行的指令在主内存的存储器地址
- 顺序执行时自动增量(加上该指令的字节数):指向下一条指令
- 分支、调用等操作时执行控制转移指令修改:引起程序转移到指定的指令执行
- 出现中断或异常时被处理器赋值而相应改变
3、存储空间分段管理
作用:“段”是保存相关代码或数据的一个主存区域
应用程序主要涉及3类基本段:代码段、数据段、堆栈段
- 代码段(Code Segment):存放程序的可执行代码(处理器指令)
- 数据段(Data Segment):存放程序所用的数据,例如全局变量
- 堆栈段(Stack Segment):程序需要的特殊区域,存放返回地址、临时变量等

4、段寄存器
作用:段寄存器表明某个段在主存中的位置
- 6个16位段寄存器:CS、DS、SS、ES、FS、GS
| 段名 | 符号 |
|---|---|
| 代码段 | CS(Code Segment) |
| 堆栈段 | SS(Stack Segment) |
| 数据段 | DS(Data Segment)、ES(Extra Segment)、FG、GS |
5、xx段的当前指令地址
编程采用逻辑地址(段基地址 : 偏移地址)
代码段
- 代码段:段基地址(代码段寄存器CS指示),偏移地址(指令指针寄存器EIP保存)

堆栈段
- 堆栈段:段基地址(堆栈段寄存器SS指示),偏移地址(堆栈指针寄存器ESP保存)

数据段
- 数据段:段基地址(数据段寄存器DS指示有时也用ES、FS、GS指示),偏移地址(存储器寻址方式计算出有效地址EA(通过多种方式计算出来的)指示)

(三)通用寄存器名称
| 符号 | 英文名称 | 中文名称 |
|---|---|---|
| EAX | Accumulator | 累加器 |
| EBX | Base Address | 基址寄存器 |
| ECX | Counter | 计数器 |
| EDX | Data | 数据寄存器 |
| ESI | Source Index | 源变址寄存器 |
| EDI | Destination Index | 目的变址寄存器 |
| EBP | Base Pointer | 基址指针 |
| ESP | Stack Pointer | 堆栈指针 |
储存
(一)计算机的硬件组成结构

汇编语言程序员将硬件抽象为:寄存器、储存器地址、输入输出地址
(二)存储器地址
1、主存储器容量很大,被划分成许多存储单元
2、每个存储单元被编排一个号码,即储存单元地址
- 称为存储器地址(Memory Address)
3、每个储存单元以字节为基本储存单位
-
即字节编址(Byte Addressable)
-
一个字节(Byte)等于8个二进制位(Bit)
-
二进制位是计算机存储信息的最小单位
**数据基本单位:位 < 字节 < 字 < 双字 **
| 单位 | 大小 |
|---|---|
| 位 | 1Bit |
| 字节 | 8位(8Bit) |
| 字 | 16位(16Bit) |
| 双字 | 32位(32Bit) |
4、处理器连接的物理存储器使用物理地址
- 从0开始顺序编排
- 直到其支持的最大存储单元
4GB寻址(=2的32次方B存储空间):0~FFFF FFFF H

(三)储存模型
简介
1、高新能处理器集成有储存管理单元 MMU(Memory Management Unit)
2、操作系统利用MMU进行主存储器空间管理
- 程序并不是直接寻址物理存储器
3、IA-32处理器提供3种储存模型(Mermory Model)
- 用于程序访问存储器
IA-32处理器的储存模型
1、平展储存模型(Flat Memory Model)
- 存储器是一个连续的4GB线性地址空间
2、段式储存模型(Segmented Memory Model)
- 存储器由一组独立的地址空间组成:段(Segment)
- 每个段都可以达到4GB
3、实地址储存模型(Real-address Memory Model)
- 8086处理器的储存模型(最大1MB)
- 段式存储模型的特例(段最大64KB)
存储空间分段管理
作用:“段”是保存相关代码或数据的一个主存区域
应用程序主要涉及3类基本段:代码段、数据段、堆栈段
- 代码段(Code Segment):存放程序的可执行代码(处理器指令)
- 数据段(Data Segment):存放程序所用的数据,例如全局变量
- 堆栈段(Stack Segment):程序需要的特殊区域,存放返回地址、临时变量等

逻辑地址
1、存储器空间可以分段管理,采用逻辑地址指示
2、逻辑地址 = 段基地址 : 偏移地址
- 段基地址 = 在主存中的起始地址
- 偏移地址 = 距离段基地址的位移量
3、处理器内部以及程序员编程时采用逻辑地址
- 操作系统利用储存管理单元MMU将
逻辑地址映射为线性地址(虚拟地址) - 处理器使用物理地址访问主存储存芯片

物理地址 vs 逻辑地址
- 物理地址 = 绝对地址
- 逻辑地址 = 相对地址
所指向的对象都是一样的,叫法不同:

Win32的虚拟地址分配
起始地址为0000H

本文介绍了IA-32处理器的寄存器,包括通用寄存器、专用寄存器如EFLAGS和EIP,以及存储空间的分段管理。寄存器在程序执行中起到关键作用,如EIP保存下一条指令的地址,段寄存器指示内存中的段位置。同时,文章阐述了逻辑地址与物理地址的区别,以及Win32的虚拟地址分配。
1065

被折叠的 条评论
为什么被折叠?



