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

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)

http://www.xdnf.cn/news/4267.html

相关文章:

  • 匿名函数对编译错误的影响
  • JVM——垃圾回收
  • 开发规范 - 空指针异常等低级问题注意点
  • 10B扩散文生图模型F-Lite技术报告速读
  • C++ 享元模式与共享工厂模式详解
  • Java学习手册:分库分表策略
  • ESP32- 开发笔记- 软件开发 5 -I2C
  • VMware Fusion安装win11 arm;使用Mac远程连接到Win
  • IBM BAW(原BPM升级版)使用教程:基本概念
  • 设备管理系统的功能架构与核心价值
  • Jesse James Garrett 用户体验方法论
  • 全格式文档转 Markdown 工具,Docker 一键部署,支持 API 调用
  • C# 实现PLC数据自动化定时采集与存储(无需界面,自动化运行)
  • 算法 | 长颖燕麦优化算法AOO,算法原理,公式,深度解析+性能实测(Python代码)
  • linux -c程序开发
  • 双目标清单——AI与思维模型【96】
  • 高等数学第四章---不定积分(§4.3分部积分法4.4有理真分式函数的不定积分)
  • 应对联网汽车带来的网络安全挑战
  • FTPS和SFTP(文件传输安全协议)
  • 拨叉831003加工工艺及钻φ22花键底孔夹具设计
  • 量子跃迁:破解未来计算的“时空密码”​
  • 如何在vscode中set the environment variable `TF_ENABLE_ONEDNN_OPTS=0`
  • Linux下的c/c++开发之操作mysql数据库
  • 【东枫科技】代理英伟达产品:DPU
  • Android View#post()源码分析
  • Android 中解决 annotations 库多版本冲突问题
  • 网络安全等级保护有关工作事项[2025]
  • BGP优化
  • 【计算机网络-应用层】HTTP服务器原理理解以及C++编写
  • 从设备交付到并网调试:CET中电技术分布式光伏全流程管控方案详解