您的位置:首页 > 其它

【汇编语言】寄存器和地址

2021-03-04 20:31 176 查看

寄存器和地址


文章目录

  • 二、地址
  • 一、寄存器

    (1)透明寄存器

    透明寄存器对应用人员来说不可见,不能直接控制

    (2)可编程寄存器

    具有引用名称、供编程使用

    1.通用寄存器

    处理器最常使用的整数通用寄存器,可用于保存整数数据、地址等

    32位IA-32处理器具有8个32位通用寄存器
    EAX,EBX,ECX,EDX,ESI,EDI,EBP,ESP
    它们源自16位8086处理器的8个16位通用寄存器 AX,BX,CX,DX,SI,DI,BP,SP
    前4个寄存器还可分成高低字节,形成8个8位通用寄存器 AH,AL,BH,BL,CH,CL,DH,DL

    • 32位通用寄存器
      寄存器名称英文中文作用
      EAXAccumulator累加器使用频度最高,用千算术运算逻辑运算以及与外设传送信息等
      EBXBase Address基址寄存器常用来存放存储器地址,以方便指向变批或数组中的元素
      ECXCounter计数器常作为循环操作等指令中的计数器
      EDXData数据寄存器可用来存放数据,其中低 16 DX 常用来存放外设端口地址
      ESISource Index源变址寄存器用于指向字符串或数组的源操作数
      EDIDestination Index目的变址寄存器用于指向字符串或数组的目的操作数
      EBPBase Pointer基址指针默认情况下指向程序堆栈区域的数据,主要用于在子程序中访问通过堆栈传递的参数和局部变批
      ESPStack Pointer堆栈指针专用于指向程序堆栈区域顶部的数据,在涉及堆栈操作的指令中会自动增加或减少

    2.专用寄存器

    • 标志寄存器FLAG

      标志体现了某种工作形态,反映指令执行结果或控制指令执行形式。

      标志寄存器包含 组状态标志 、一 个控制标志和 组系统标志,其初始状态为000000002 H:

      ►状态标志:记录指令执行结果的辅助信息
      状态标志有 6个 从低位到高位依次是:
    中文缩写全称
    进位标志CFCarry Flag
    奇偶标志PFParity Flag
    调整标志AFAdjust Flag
    零标志ZFZero Flag
    符号标志SFSign Flag
    溢出标志OFOverflow Flag
    • ►控制标志:方向标志DF,仅用于用于串操作指令中,控制地址的变化方向
    • ►系统标志:控制操作系统或核心管理程序的操作方式
  • 指令指针寄存器EIP

    保存将要执行的指令在主存的存储器地址

    EIP 具有自动增量的能力 处理器执行完一条指令, EIP 就加上该指令的字节数,指向下一条指令

  • 段寄存器

    段寄存器表明某个段在主存中的位置

    寄存器
    代码段CS(Code Segment)
    堆栈段SS(Stack Segment)
    数据段DS(Data Segment)ES (Extra Segment)FS GS
  • 二、地址

    (1)存储模型

    • 平展存储模型(Flat Memory Model)

      存储器是一个连续的4GB线性地址空间

      平展存储模型 (Flat Memory Model) 下,对程序来说存储器是一个连续的地址空间,称为线性地址空间。程序需要的代码、数据和堆栈都包含在这个地址空间中。线性地址空间也以字节为基本存储单位,即每个存储单元保存一个字节且具有一个地址,这个地址称为线性地址 (Linear Address) IA-32 处理器支持的线性地址空间是 0 ~ 2 32 2^{32} 232 - 1 (4GB 容量)。

    • 段式存储模型(Segmented Memory Model)

      存储器由一组独立的地址空间组成:段(Segment) 每个段都可以达到4GB

      段式存储模型 (Segmented Memory Model) 下,对程序来说存储器由一组独立的地址空间组成,这个地址空间称为段 (Segment) 。通常,代码、数据和堆栈位千分开的段中。程序利用逻辑地址 (Logical Address) 寻址段中的每个字节单元,每个段都可以达到 4GB。
      在处理器内部,所有的段都被映射到线性地址空间 程序访问一个存储单元时,处理器会将逻辑地址转换成线性地址 使用段式存储模型的主要目的是增加程序的可靠性。

    • 实地址存储模型(Real-address Memory Model)

      实地址存储模型 (Real address Mode Memory Model) 8086 处理器的存储模型 IA-32 处理器之所以支持这种存储模型,是为了兼容原来为 8086 处理器编写的程序 实地址存储模型是段式存储模型的特例,其线性地址空间最大为 1MB 容量,由最大为 64KB 的多个段组成。

    (2)存储空间分段管理

    • 代码段(Code Segment):存放程序的可执行代码(处理器指令) 段基地址:代码段寄存器CS指示
    • 偏移地址:指令指针寄存器EIP保存
  • 数据段(Data Segment):存放程序所用的数据,例如全局变量
      段基地址:堆栈段寄存器SS指示
    • 偏移地址:堆栈指针寄存器ESP保存
  • 堆栈段(Stack Segment):程序需要的特殊区域,存放返回地址、临时变量等
      段基地址:数据段寄存器DS指示,有时也用ES、FS和GS指示
    • 偏移地址:存储器寻址方式计算出,有效地址EA指示

    (3)物理地址与逻辑地址

    • 物理地址

      主存储器需要处理器通过总线进行访问,称为物理存储器。物理存储器的每个存储单元有一个唯一的地址,这个地址就是物理地址 (Physical Address) 。物理地址空间从 开始顺序编排,直到处理器支持的最大存储单元。

    • 逻辑地址

      存储器空间可以分段管理,采用逻辑地址指示

      逻辑地址=段基地址∶偏移地址 ►段基地址=在主存中的起始地址
    • ►偏移地址=距离段基地址的位移量
  • 处理器内部以及程序员编程时采用逻辑地址
  • 不论是何种存储模型,程序员都采用逻辑地址进行程序设计,逻辑地址由段基地址和偏移地址组成 段基地址(简称段地址)确定段在主存中的起始地址,以段基地址为起点,段内的位置可以用距离该起点的位移量表示,称为偏移 (Offset) 地址 。

    (4)对存储器地址的理解

    存储器地址在计算机硬件上的位置为物理地址,如果将物理地址暴露给程序,程序可以轻易访问每一个字节的空间,可能会破坏操作系统,导致程序崩溃。因此操作系统对内存进行新的抽象,操作系统为程序分配一个线性的空间,线性空间内的地址就是虚拟地址。在虚拟地址中的程序采取分段管理,想要确定存储器的位置,只需要知道存储器位于哪一段,在段的什么位置即可,因此编程使用的逻辑地址可以使用段基地址:偏移地址来表示。

    内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: