热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

汇编语言中各种寄存器的总结

汇编语言中各种寄存器的总结1、通用寄存器数据寄存器AXBXCXDX指针寄存器SPBP变址寄存器SIDI2、控制寄存器IPFLAG3、段寄存器CS:代码段寄存器基本概念解释start

汇编语言中各种寄存器的总结

  • 1、通用寄存器
    • 数据寄存器
      • AX
      • BX
      • CX
      • DX
    • 指针寄存器
      • SP
      • BP
    • 变址寄存器
      • SI
      • DI
  • 2、控制寄存器
    • IP
    • FLAG
  • 3、段寄存器
    • CS:代码段寄存器
      • 基本概念解释
      • start作用
    • DS:数据段寄存器
      • 访问内存中的数据的方式
      • DS常见的误用
    • SS
    • ES
  • 总结

早期的8086cpu中共有14个寄存器:
分别为:AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES
按照功能来分,大致可分为三类

1、通用寄存器

数据寄存器

AX

Accumulator:累加寄存器,也称之为累加器,常用于存放算术、逻辑运算中的操作数或结果。另外,所有的外部设备的输入输出指令都只能使用AL或AX作为数据寄存器。

BX

BX (Base):基地址寄存器,可用于数据寄存器,访问存储器时、可以存放被访问内存的地址,是具有双重功能的寄存器

CX

CX (Count):计数器寄存器;在循环、串操作指令中用作计数器。如在loop循环中用作计数器。

DX

DX (Data):数据寄存器;在乘除法中作为数据累加器,在输入输出操作中存放端口的地址。此外,在做双字长乘除法运算时,DX 与AX合起来存放一个双字长数(32位),其中DX存放高16位(余数),AX存放低16位(商)。

指针寄存器

SP

Stack Pointer:堆栈指针寄存器,存放栈顶的偏移位置,供堆栈操作使用,常用SS搭配进行使用

BP

Base Pointer:基指针寄存器;存放堆栈内数据的基地址

变址寄存器

SI

Source Index:源变址寄存器;主要用于存放地址,在字符串操作中存放源操作数的偏移地址。变址寄存器内存放 的地址在数据传送完成后,具有自动修改的功能。

DI

Destination Index:目的变址寄存器;主要用于存放地址,在字符串操作中存放目的操作数的偏移地址。

2、控制寄存器

IP

IP(Instruction Pointer):指令指针寄存器,常与CS进行配合使用,用于共同寻址。

FLAG

标志寄存器

3、段寄存器
  1. CS(Code Segment):代码段寄存器
  2. DS(Data Segment):数据段寄存器
  3. SS(Stack Segment):堆栈段寄存器
  4. ES(Extra Segment):附加段寄存器

CS:代码段寄存器

基本概念解释

CS,代码段寄存器常与IP(指令指针寄存器)共同使用,指示cpu当前将要读取的指令的地址。

那么cpu如何知晓该执行指令的地址呢?

当我们运行一个可执行文件时,我们需要另外一个程序来将这个可执行文件加载到内存当中,

一般是通过操作系统的外壳程序(也就是 Shell 程序),

Shell 将可执行文件加载到内存中以后,就会设置 CPU 中的两个寄存器,即设置 CS:IP 两个寄存器指向可执行文件的起始地址,此后 CPU 便从这个起始地址开始读取内存中的指令,并且执行。

start作用

start用于标记可执行文件的起始地址。

DS:数据段寄存器

DS,全称:Data Segment register,为数据段寄存器,其作用主要用于访问内存中的数据,常与偏移地址共同使用,那么ds的作用是什么呢?通俗点来说就是寻找数据。cpu要读写一个内存单元时,必须要知晓这个内存单元在哪,因此便可以通过ds(数据段寄存器)和偏移地址两个参数,来确定这个内存单元在哪。

访问内存中的数据的方式

方式一:段地址(ds):[偏移地址]
方式二:[偏移地址],等同于ds:[偏移地址]

需要注意 在访问内存中数据的时候,段地址不能直接写数值而必须由段地址寄存器来提供,比如:

mov ax 3423h
mov 1000h:[0h] ,ax//这种写法就是错误的

而正确的写法

mov ax, 3423h
mov bx, 1000h // 现将内存段地址写书数据寄存器中
mov ds,bx // 将数据寄存器中的内存段地址写入 数据段寄存器中
mov ds:[0], ax // 将数据段寄存器中的数据 写入内存地址、(ds:[0]) 中

DS常见的误用

段寄存器是不支持将数据直接写入的,而是需要借用其他寄存器将数据写入:
如:

mov ds,1000h
//这种方式是错误的
//正确写法
mov bx,1000h
mov ds,bx

SS

堆栈寄存器,一般作为栈和sp搭档,其中ss用作堆栈段的首地址,sp用于堆栈段的偏移地址。
当放入数据时,sp应当先进行移位,再放入数据;当释放数据时,应当先释放数据,sp再进行移位。

ES

扩展段寄存器。

总结

每个寄存器都是16位的,即dword双字节,除了数据寄存器外的寄存器均不可分为两个8位的寄存器使用。


推荐阅读
  • MySQL性能优化与调参指南【数据库管理】
    本文详细探讨了MySQL数据库的性能优化与参数调整技巧,旨在帮助数据库管理员和开发人员提升系统的运行效率。内容涵盖索引优化、查询优化、配置参数调整等方面,结合实际案例进行深入分析,提供实用的操作建议。此外,还介绍了常见的性能监控工具和方法,助力读者全面掌握MySQL性能优化的核心技能。 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 本文深入探讨了 MXOTDLL.dll 在 C# 环境中的应用与优化策略。针对近期公司从某生物技术供应商采购的指纹识别设备,该设备提供的 DLL 文件是用 C 语言编写的。为了更好地集成到现有的 C# 系统中,我们对原生的 C 语言 DLL 进行了封装,并利用 C# 的互操作性功能实现了高效调用。此外,文章还详细分析了在实际应用中可能遇到的性能瓶颈,并提出了一系列优化措施,以确保系统的稳定性和高效运行。 ... [详细]
  • 本文探讨了在Lumen框架中实现自定义表单验证功能的方法与挑战。Lumen的表单验证机制默认返回无状态的JSON格式API响应,这给初学者带来了一定的难度。通过深入研究Validate类,作者分享了如何有效配置和使用自定义验证规则,以提升表单数据的准确性和安全性。 ... [详细]
  • Linux磁盘管理入门指南:MBR分区格式详解与安装步骤
    在 CentOS 7.x 环境下,本文详细介绍了 MBR 分区格式的基本概念及其安装步骤。实验中使用了 SAS 和 SATA 硬盘,其中 SAS 硬盘主要用于企业级应用和服务器,而 SATA 硬盘则广泛应用于个人计算机和低端服务器。文章通过具体操作示例,帮助读者更好地理解和掌握 Linux 磁盘管理的基本技能。 ... [详细]
  • 2019年后蚂蚁集团与拼多多面试经验详述与深度剖析
    2019年后蚂蚁集团与拼多多面试经验详述与深度剖析 ... [详细]
  • 在 Linux 系统中,`/proc` 目录实现了一种特殊的文件系统,称为 proc 文件系统。与传统的文件系统不同,proc 文件系统主要用于提供内核和进程信息的动态视图,通过文件和目录的形式呈现。这些信息包括系统状态、进程细节以及各种内核参数,为系统管理员和开发者提供了强大的诊断和调试工具。此外,proc 文件系统还支持实时读取和修改某些内核参数,增强了系统的灵活性和可配置性。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
  • 深入解析Java内存架构、垃圾回收机制与内存泄漏问题
    Java内存架构(Java内存模型)上面是堆的Java内存模型以及Java虚拟机(JVM)中运行的任何Java应用程序的Pe ... [详细]
  • 从无到有,构建个人专属的操作系统解决方案
    操作系统(OS)被誉为程序员的三大浪漫之一,常被比喻为计算机的灵魂、大脑、内核和基石,其重要性不言而喻。本文将详细介绍如何从零开始构建个人专属的操作系统解决方案,涵盖从需求分析到系统设计、开发与测试的全过程,帮助读者深入理解操作系统的本质与实现方法。 ... [详细]
  • HBase在金融大数据迁移中的应用与挑战
    随着最后一台设备的下线,标志着超过10PB的HBase数据迁移项目顺利完成。目前,新的集群已在新机房稳定运行超过两个月,监控数据显示,新集群的查询响应时间显著降低,系统稳定性大幅提升。此外,数据消费的波动也变得更加平滑,整体性能得到了显著优化。 ... [详细]
  • 在稀疏直接法视觉里程计中,通过优化特征点并采用基于光度误差最小化的灰度图像线性插值技术,提高了定位精度。该方法通过对空间点的非齐次和齐次表示进行处理,利用RGB-D传感器获取的3D坐标信息,在两帧图像之间实现精确匹配,有效减少了光度误差,提升了系统的鲁棒性和稳定性。 ... [详细]
  • 负载均衡基础概念与技术解析
    随着互联网应用的不断扩展,用户流量激增,业务复杂度显著提升,单一服务器已难以应对日益增长的负载需求。负载均衡技术应运而生,通过将请求合理分配到多个服务器,有效提高系统的可用性和响应速度。本文将深入探讨负载均衡的基本概念和技术原理,分析其在现代互联网架构中的重要性及应用场景。 ... [详细]
  • 在处理大规模并发请求时,传统的多线程或多进程模型往往无法有效解决性能瓶颈问题。尽管它们在处理小规模任务时能提升效率,但在高并发场景下,系统资源的过度消耗和上下文切换的开销会显著降低整体性能。相比之下,Python 的 `asyncio` 模块通过协程提供了一种轻量级且高效的并发解决方案。本文将深入解析 `asyncio` 模块的原理及其在实际应用中的优化技巧,帮助开发者更好地利用协程技术提升程序性能。 ... [详细]
  • 深入理解Java事务编程:可串行化隔离级别的快照隔离机制解析
    深入理解Java事务编程:可串行化隔离级别的快照隔离机制解析 ... [详细]
author-avatar
DalianLiLing_143
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有