当前位置: 首页 > news >正文

8086汇编:寄存器

 一、通用寄存器

        通用寄存器是一种计算机硬件组件,用于暂时存储和处理数据。而8086处理器是16位处理器,采用16位寄存器。而32位寄存器的名称,是在16位寄存器名词上加上前缀"E",例如:EAX。然而64位寄存器的名称,是在16位寄存器名词上加上前缀"R",例如:RAX

1.常见通用寄存器

        AX 累加寄存器:所有外部设备的输入输出指令只能使用AX做为数据寄存器,存储函数返回值或临时数据,同时参与乘除法的运算

        BX 基址寄存器:可以存放被读写的存储单元的地址,也就是访问局部变量,例如:数组的Head地址。

        CX 计数寄存器:在循环操作、移位操作时用作存储计数,以及字符串操作逐位读取。

        DX 数据寄存器:在寄存器间接寻址中的I/O指令中存放I/O端口的地址。此外,在做双字长乘除法运算时,用于乘除法的第二个操作数或存储结果。

        SI (Source)源寄存器:指向源操作数。

        DI (Destination)目的寄存器:指向目的操作数 。

        SP 栈顶寄存器:指向栈顶。

        BP 栈底寄存器:指向栈底。

2.关于AH和AL的解释

        为了兼容8086上一代的8位寄存器,16位寄存器将高八位地址叫作AH,而低八位的叫作AL。同样相对应的BH、BL、CH、CL、DH、DL等。但对于32位寄存器EAX,兼容16位寄存器并不存在指定名称来区分高位低位,而是默认低16位为AX。同理可得,64位RAX的低32位是EAX。

3.字在寄存器中的存储

        在计算机组成原理中,一次存取、加工和传送的数据长度叫字,根据处理器的不同而不同。但在编程语言中,一个字占2个字节。而在8086处理器中,一次存取的数据长度为16位。汇编语言中,一个字(WORD)等于2个字节(一个字节8个比特)。而双字(DWORD)即为4个字节,四字为8个字节

二、段寄存器

1.常见段寄存器

        CS(Code Segment )指向存放程序的内存段,也就是代码段。存放的数据是程序的入口,也就是程序要执行的第一条指令的地址,和IP指针寄存器搭配使用IP是用来存放下条待执行的指令在该段的偏移量,把它们合在一起可在该内存段内取到下次要执行的指令,即是CS:IP 。

        SS(Stack segment) 指向用于堆栈(堆栈用于存储临时数据和函数,如函数的局部变量和调用信息。当一个函数被调用时,它的参数和局部变量会被推入栈中,函数执行完毕后,这些信息会被弹出栈)的内存段,与SP和BP搭配使用,即SS:SP。

        DS(Date Segment):指向用于数据存储的段地址,配合偏移地址,来获取具体的数据信息。

三、辅助寄存器

 R8-R15 辅助寄存器,只存在于64位处理器。

四、控制寄存器

CR0-CR4:控制CPU模式和页表等

IP 指令指针寄存器,指向存放下条待执行的指令在该段的偏移量。

XMM0-XMM15:用于浮点计算 

五、标志寄存器 

        FLAGS:存储处理的状态标记,比如说:溢出、进位等。它是一个16位的寄存器,但只使用到了其中的9位。分别是状态标志位(CF、SF、AF、PF、OF、ZF)和 控制标志位(IF、TF、DF)。

6个状态标志位:

符号解释
CF无符号数运算的溢出标志判断,有溢出则CF=1,反之CF=0。
SF运算结果为负数时,SF=1,否则SF=0。
AF运算过程中,AF只看低四位,若低四位有进位或者借位,则AF=1。
ZF相减运算结果为0时,则ZF=1,否则ZF=0。
PF运算结果的所有Bit中“1”的个数为偶数时PF=1,为奇数个则PF=0。
OF有符号数运算的溢出标志判断,有溢出则OF=1,反之OF=0。

3个控制标志位:

符号解释
IF中断允许标志位。它用来控制8086是否允许接收外部中断请求。若IF=1,8086能响应外部中断,反之则屏蔽外部中断。
DF控制字符串操作指令(如MOVSCMPSSCAS等)的地址增减方向。

DF=0:递增模式,字符串操作从低地址向高地址进行(通过CLD指令设置)。

DF=1:递减模式,字符串操作从高地址向低地址进行(通过STD指令设置)。

TF启用单步调试模式,若TF=1,启动单步调试,反之则正常运行。

总结:

        主要对8086汇编的寄存器进行整理,如通用寄存器AX、BX、CX、DX、SI、DI、SP、BP等。对于段寄存器CS:IP用于指向下一条待执行的语句,SS:SP栈指针,还要标志寄存器6个用于跳转语句的条件判断。

参考资料:

汇编中的通用基础寄存器ax,bx,cx,dx等的含意及作用解释_axbxcxdx寄存器有什么区别-CSDN博客

深入理解段寄存器(以8086cpu为例)_段式存储cpu-CSDN博客

x86汇编之——8086寄存器讲解 - 知乎 (zhihu.com)

相关文章:

  • 事务(transaction)-上
  • K8s 常用命令、对象名称缩写汇总
  • [Linux_69] 数据链路层 | Mac帧格式 | 局域网转发 | MTU MSS
  • TikTok 矩阵账号运营实操细节:打造爆款矩阵
  • 理解IP四元组与网络五元组:网络流量的“身份证”
  • 物流无人机技术要点与挑战分析!
  • Maven 依赖发布与仓库治理
  • 互联网大厂Java求职面试:AI与云原生下的系统设计挑战-3
  • 【Linux】Linux中的调度和切换
  • 解决 pnpm dev 运行报错的坎坷历程
  • Chat_TTSV3 本地版 Chat_TTS—UI本地版 免费分享
  • 快速体验 .NET9 提供的 HybridCache 混合缓存
  • 26.2Linux中SPI的驱动实验(编程)_csdn
  • 【Spring Boot 注解】@Configuration与@AutoConfiguration
  • 多线程1-进程和线程
  • mapbox基础,加载Fog云雾效果
  • Linux下的c/c++开发之操作mysql数据库
  • GCC编译器安装详细说明(举例arm-2013q3)
  • 神经网络之训练的艺术:反向传播与常见问题解决之道
  • 移动应用开发:自定义 View 处理大量数据的性能与交互优化方案
  • 于东来再次回应玉石质疑:邀请前往胖东来深入考察,随时欢迎各方调查
  • 上海市政府常务会议部署提升入境旅游公共服务水平,让国际友人“无障碍”畅游上海
  • “鱼米之乡”江苏兴化的产业哲学:以融合与创新重构价值链条
  • 当Z世代与传统戏曲在春日校园相遇
  • 体坛联播|拜仁遭绝平未能提前夺冠,刘翔钻石联赛纪录作古
  • “五一”假期第三天,预计全社会跨区域人员流动量超2.8亿人次