• 汇编中寄存器及其用处


    寄存器图组

    1. 通用寄存器

    数据寄存器 用处
    AX(accumulator) 作为 累加器 用,它是算数运算的主要寄存器。另外,所有的I/O指令都使用这一寄存器与外部设备传送信息
    BX(base) 计算机存储器地址时,经常作为寄存器
    CX(count) 在位移、循环和串处理指令中常用来做保存计数值
    DX(data) 一般在做双字长运算时把DX和AX组合在一起存放一个双字长数,DX用来存放高位;对某些I/O操作,DX可用来存放I/O的端口地址

    指针寄存器 用处
    SP(stack pointer)、ESP 堆栈指针寄存器,其中存放当前堆栈段栈顶的偏移量,他们总是与SS堆栈段寄存器配合存取堆栈中的数据。实模式下使用SP,在80386以上的保护模式下使用ESP
    BP(base pointer)、EPB 基址指针寄存器。它可以与堆栈段寄存器SS联用来确定堆栈段中的吗某一存储单元的地址。并可以作堆栈区中的一个基地址以便访问堆栈中的信息。

    变址寄存器 作用
    SI(source index) 源变址寄存器 DI(destination index) 目的变址寄存器 一般与数据段寄存器DS联用,用来确定数据段中某一存储单元的地址。这两个变址寄存器有自动增量和自动减量的功能。

    SP、ESP堆栈指针不能随意修改


    2. 控制寄存器


    指令指针寄存器

    IP、EIP叫做指令指针寄存器,它总是与CS段寄存器配合指出下一条要执行指令的地址,其中存放偏移量部分。计算机用指令指针寄存器来控制指令序列的执行流程。


    标志寄存器

    运算结果特征标志 用处
    CF(Carry Flag) 进位标志,记录运算结果的最高位向前产生的进位或借位。可用于检测无符号数二进制加减法运算时是否发生溢出(溢出时 CF=1)
    PF(Parity Flag) 奇偶标志,记录运算结果最低位中含1的个数是奇还是偶。可用于检测数据传送过程中是否发生错误。
    AF(Auxiliary carry) 辅助进位标志,记录运算结果低4位向前产生的进位或借位。只有在执行十进制运算指令时才关心此位。
    ZF(Zero Flag) 零标志,记录运算结果是否位0。结果为0则置1,否则清0
    OF(Overflow Flag) 溢出标志,记录运算结果是否超出了机器所能表示的范围。可用于检测带符号数运算时是否发生溢出(溢出时OF=1)
    SF(Sign Flag) 符号标志,记录运算结果的符号。结果为负则置1,否则清0

    控制标志(处理器) 用处
    IF(Interrupt Flag) 中断允许标志,IF的控制只对外部可屏蔽中断请求(INTR)起作用。当IF=1时允许CPU响应INTR。
    DF(Direction Flag) 方向标志。专服务于字符串操作指令,当DF位为1时,每次操作后使变址寄存器SI和DI减小,这样就使串处理从高地址向低地址方向处理。当DF位为0时,则使SI和DI增大。
    TF(Trap Flag) 陷阱标志,用于程序调试。当TF=1 时,CPU处于单步方式;当TF=0时,CPU处于连续方式。
    IOPL(I/O Privilege Level) 特权标志,占D13和D12两位。在保护模式下,用于控制对I/O地址空间的访问。只对80286以上CPU有效。
    ID(Identification) 标识标志,若ID=1,则表示Pentium支持CPUID指令。只对Pentium以上CPU有效。

    DEBUG中测试位的表示符号


    3.段寄存器


    IBM PC机的存储器采用分段管理方法组织,因此一个物理地址用段基址和偏移量 表示。
    段寄存器存放段基址。在实模式下存放当前正在运行程序的段基地址,在保护模式下存放段选择子。


    寄存器图组


    段寄存器 用处
    CS(code segment) 代码段寄存器,指定当前代码段,代码段中存放当前正在运行的程序段。
    SS(stack segment) 指定当前堆栈段。
    DS(data segment) 数据段寄存器,指定当前运行程序所使用的数据段。
    ES(extra segment) 附加数据段寄存器,指定当前运行程序所使用的附加数据段

    DS是主要的数据段寄存器,在默认情况下使用DS所指向段的数据。若要引用其它段中的数据,需要显式说明。

  • 相关阅读:
    Java的代理proxy机制
    Java 编译器 javac 笔记:javac API、注解处理 API 与 Lombok 原理
    Java 运行时获取方法参数名
    python 之 list 和 dict 置空
    Python 模块(Module)调用
    Python 模块(Module)及包
    Mybatis中进行批量更新(updateBatch)
    可持久化线段树+主席树+动态主席树
    无向图的割点与割边
    [NOIP2016] 愤怒的小鸟 题解
  • 原文地址:https://www.cnblogs.com/DismalSnail/p/8615242.html
Copyright © 2020-2023  润新知