寄存器分类

    • 寄存器分类
      • 通用寄存器(两个八位寄存器)
        • AX(可分为)
          • AL和AH是作为一个独立的8位寄存器来使用的,和AH没有关系,CPU在执行指令时不会将进位存储在AH中
          • 但是,如果执行add ax,93H时会将进位存储到AH中(保证程序兼容性)
          • AH
          • AL(低位)
        • BX
          • BH
          • BL
        • CX
          • CH
          • CL
        • DX
          • DH
          • DL
      • 变址寄存器(执行与地址有关的操作,纯粹的16位寄存器)
        • 凡是bx出现的地方,都可以以此替换
        • 编程时可以用此来实现两段空间的交互
        • SI 源变址寄存器
        • DI 目标变址寄存器
      • SP 栈顶的偏移地址
      • BP 寻址寄存器 ?
      • IP 指令指针寄存器(偏移地址)
      • 专门存放段地址
        • CS 代码寄存器(段地址)
          • 同时修改CS、IP内容,使用jmp 段地址:偏移地址
        • SS 栈顶段地址
        • DS 存放要访问数据的段地址
        • ES 附加段寄存器
      • 标志寄存器(16位寄存器,按位起作用)
        • 例:PSW
        • 作用 :
          • 用来储存相关指令的某些执行结果
          • 用来为CPU执行相关指令提供行为依据
          • 用来控制CPU的相关工作方式
        • 直接访问标志寄存器的方法
          • pushf:将标志寄存器的值压栈
          • popf:从栈中弹出数据,送入标志寄存器中
        • ZF(零标志 Zero Flag)
          • = 1,表示结果是0,
          • = 0,表示结果不是0
        • PF(奇偶标志 Parity Flag)
          • 记录二级制位中所有1 的个数
          • 1的个数位偶数,PF = 1;
          • 1的个数位奇数,PF = 0;
        • SF(符号标志 Sign Flag)
          • 将结果视为有符号数
          • 结果为负,SF = 1;
          • 结果为非负,SF = 0;
        • CF(进位标志 Carry Flag)
          • 记录运算结果向更高位的进位值或从更高的位借位,对于无符号数
          • 有进位或借位,CF = 1;
          • 无进位或借位,CF = 0;
        • OF(溢出标志 Overflow Flag)
          • 有符号数操作指令执行后,
          • 有溢出,OF = 1;
          • 无溢出,OF = 0;
        • DF(方向标志 Direction Flag)
          • 在串处理指令中,控制每次操作后si,di的增减
            • movesb 以字节为单位传送
              • ((es)\times×\times×16+(di)) = ((ds)\times×\times×16+(si))
            • movesw 以字节为单位传送
              • ((es)\times×\times×16+(di)) = ((ds)\times×\times×16+(si))
          • DF = 1,每次操作后si,di递增
          • DF = 0,每次操作后si,di递减
          • 对DF为进行设置的指令
            • cld指令:将标志寄存器的DF为设为0
            • std指令:将标志寄存器的DF设为1
      • 寄存器冲突问题
        • 编写调用子程序时,看有没有使用子程序,以避免寄存器的重复使用
        • 在编写子程序时,不使用会产生冲突的子程序
        • 在子程序使用的寄存器入栈,当子程序使用完时将寄存器出栈(实用性较高)
    •  

posted on   messing  阅读(319)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示