汇编语言中各种寄存器的含义与功能

本文详细介绍了16位和32位CPU的寄存器结构,包括通用寄存器(如AX,BX,CX,DX等)、段寄存器(CS,DS,ES,SS等)和控制寄存器(IP,PC,PSW等),并讨论了它们在数据处理、地址计算、控制流程中的作用,以及32位寄存器如何扩展了16位的功能,如EAX、EIP等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 16位寄存器组

        1.1 基本知识

        1.2 各寄存器详解

1.2.1 通用寄存器(8个)

1.2.2 段寄存器(4个)

1.2.3 控制寄存器(2个)

2. 32位寄存器

        2.1 通用寄存器(8个)

        2.2 段寄存器(6个)

        2.3 控制寄存器(2)

3. 各种寄存器详解

        3.1数据寄存器

        3.2地址指针寄存器

        3.3段寄存器

        3.4控制寄存器


1. 16位寄存器组

        1.1 基本知识

  • 数据寄存器, 变址寄存器统称为通用寄存器
  • ax中的x表示"mix(混合)"
    • ax指al与ah的混合(al为高8位, ah为低8位)
    • eax中e表示extended(扩展)
  • 8086的16位寄存器共14个, 分为
    • 8个通用寄存器(ax-dx, si, di, sp,bp)
      • 在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址
    • 4个段寄存器(cs, ds, es, ss)
    • 2个控制寄存器(IP, PC)

        1.2 各寄存器详解

1.2.1 通用寄存器(8个)
  • ax        Accumulator Register        累加寄存器        算术运算的主要寄存器
  • bx        Base Register        基址寄存器, 属于数据寄存器,但进程作为地址寄存器        
  • cx        Count Register        计数寄存器        串操作,循环控制的计数器;循环语句中默认存放循环次数, 位操作中低八位cl指明移位位数
  • dx        Data Register        数据寄存器, 乘除运算中为默认操作数;IO指令中用作地址寄存器
  • SI        Source Index Register        源变址寄存器
  • DI        Destination Index Register        目的地址寄存器         
  • SP        Stack Point Register       堆栈寄存器
  • BP        Base Pointer Register        基址指针寄存器
1.2.2 段寄存器(4个)
  • cs        code segment register        代码段寄存器       

  • ds        data segment register        数据段寄存器       

  • es        extra segment register        附加段寄存器       

  • ss        stack segment register        堆栈段寄存器        

1.2.3 控制寄存器(2个)
  • IP        instruction pointer        指令指针,即PC (program counter)程序计数器       
  • PSW        Processor State Word        微处理器状态字 其中PSW包括有9个标志位:
    • CF—Carry Flag,进位标志
    • PF—Parity Flag,奇偶标志
    • AF—Auxiliary Carry Flag,辅助进位标志
    • ZF—Zero Flag,零标志
    • SF—Sign Flag,符号标志
    • TF—Trap Flag,陷阱标志
    • IF—Interrupt Enable Flag,中断允许标志
    • DF—Direction Flag,方向标志
    • OF—Overflow Flag,溢出标志

2. 32位寄存器

        2.1 通用寄存器(8个)

32位CPU的寄存器是32位的,并且32位的寄存器组增加了一些新的寄存器。对32位的通用寄存器EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP的低16位数据进行存取不影响高16位,所以,这些通用寄存器的低16位依旧用16位的AX、BX、CX、DX、SI、DI、SP、BP寄存器来表示。。

32位的EAX、EBX、ECX、EDX、ESI、EDI、ESP、EBP与8086中的16位的AX、BX、CX、DX、SI、DI、SP、BP功能相似。

        2.2 段寄存器(6个)

CS—Code Segment Register,代码段寄存器
DS—Data Segment Register,数据段寄存器
SS—Stack Segment Register,堆栈段寄存器
FS—Flag Segment Register,标志段寄存器

  • FS寄存器指向当前活动进程的线程的TEB结构
  • FS:[0]的地址指向TEB结构, 该结构开头为NT_TIB结构

GS—Global Segment Register,全局段寄存器

        2.3 控制寄存器(2)

  • EIP—Extended Instruction Pointer,扩展的指令指针,即PC(Program counter),程序计数器。
  • PSW—Processor State Word,微处理器状态字, 有9+4个标志位
    • 溢出标志 IOPL—I/O Privilege Level,
    • I/O特权标志 NT—Nested Task,
    • 嵌套任务标志 RF—Restart Flag,重启动标志
    • VM—Virtual 8086 Mode,虚拟8086方式标志
    • 其余同16位寄存器的

3. 各种寄存器详解

        3.1数据寄存器

  • ax, bx, cx, dx
  • 在16位CPU中, 这几个寄存器不能作为基址和变址寄存器来存放存储单元的地址
  • EAX为32位寄存器
    AX为EAX的低16位的 “ 子寄存器 ”
    ——这么叫是为了方便理解
    AL为EAX(或说AX)低8位的 “ 子寄存器 ”
    AH为AX高八位的“ 子寄存器 ”

    其他的同理!!

        3.2地址指针寄存器

  • 地址指针寄存器不可分割成8位寄存器。作为通用寄存器,也可存储算术逻辑运算的操作数和运算结果。
  • SI(源地址寄存器), DI(目标地址寄存器), BP(基址指针寄存器), SP(堆栈指针寄存器)

        3.3段寄存器

  • 段寄存器是根据内存分段的管理模式而设置的。内存单元的物理地址由段寄存器的值和一个偏移量组合而成的,这样可用两个较少位数的值组合成一个可访问较大物理空间的内存地址。
  • CS,Code,代码段寄存器,用于存放当前执行程序的段地址,IP为指令指针。
  • DS,Data,数据段寄存器,用于存放当前数据段的段地址。
  • ES,Extra,附加段寄存器,用于存放当前附加数据段的段地址
  • SS,Stack,堆栈段寄存器,用于存放当前堆栈段的段地址。
  • FS,Flag,标志段寄存器,FS寄存器指向当前活动线程的TEB结构(线程结构)。
  • GS,Global,全局段寄存器

        3.4控制寄存器

  •  IP,Instruction,指令指针寄存器,用于保存下一条即将要执行的指令的段内偏移地址。一般要通过转移指令、子程序调用、返回指令等才能改变IP的值。 
    • 32位CPU把指令指针扩展到32位,并记作EIP,EIP的低16位与先前CPU中的IP作用相同。
  • PSW,Processor State Word,微处理器状态字,其中DF、IF、TF标志用于控制CPU操作,其他ZF、SF、AF、PF、CF、OF反映ALU前一次操作的结果状态。
    •  CF,Carry,进位标志,加减运算时,最高位有进(借)位时,CF=1
    • PF,Parity,奇偶标志,操作结果的低8位中含有“1”的个数为偶数个时,PF=1
    • AF,Auxiliary Carry,辅助进位标志,加减运算时,D3位有进(借)位时,AF=1
    • ZF,Zero,零标志,运算结果为0时,ZF=1
    • SF,Sign,符号标志,操作结果的符号,结果为负,SF=1
    • OF,Overflow,溢出标志,有符号数运算时是否溢出的标志,溢出,则OF=1
    • 控制CPU的标志位:
      • DF,Direction,方向标志,字符串操作中,DF=0时,地址寄存器(SI,DI)的内容递增;DF=1时,(SI,DI)的内容递减。
      • IF,Interrupt Enable,中断允许标志,IF=1时,CPU能够响应可屏蔽中断请求;IF=0时,则CPU不能响应中断请求
      • TF,Trap,陷阱标志,TF=1时,则CPU处于单步执行方式,即每执行一条指令就自动执行一次类型1的内部中断,这主要用于Debug中。
    • 32位寄存器特有:
      • IOPL,I/O Privilege Level,I/O特权标志,I/O特权标志用两位二进制位来表示,也称为I/O特权级字段。该字段指定了要求执行I/O指令的特权级。
        如果当前的特权级别在数值上小于等于IOPL的值,那么,该I/O指令可执行,否则将发生一个保护异常。
      • NT,Nested Task,嵌套任务标志,嵌套任务标志NT用来控制中断返回指令IRET的执行。NT=0,用堆栈中保存的值恢复EFLAGS、CS和EIP,执行常规的中断返回操作;NT=1,通过任务转换实现中断返回。
      • RF,Restart Flag,重启动标志,重启动标志RF用来控制是否接受调试故障。RF=0时,表示“接受”调试故障,否则拒绝之。在成功执行完一条指令后,处理机把RF置为0,当接受到一个非调试故障时,处理机就把它置为1。
      • VM,Virtual 8086 Mode,虚拟8086方式标志,VM=1,表示处理机处于虚拟的8086方式下的工作状态,否则,处理机处于一般保护方式下的工作状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值