汇编1:寄存器

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

寄存器

(一)通用寄存器

名称符号
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(通过多种方式计算出来的)指示)

在这里插入图片描述


(三)通用寄存器名称

符号英文名称中文名称
EAXAccumulator累加器
EBXBase Address基址寄存器
ECXCounter计数器
EDXData数据寄存器
ESISource Index源变址寄存器
EDIDestination Index目的变址寄存器
EBPBase Pointer基址指针
ESPStack 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

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值