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

汇编(cpu寄存器描述)

寄存器


什么是寄存器?

寄存器(Register)是CPU内部的高速存储单元,用于临时存放数据、指令或地址。它们的访问速度远快于内存(RAM),是CPU执行计算和控制流程的关键组件

通用寄存器

x86

  1. EAX, EBX, ECX, EDX, ESI, EDI, ESP, EBP 都是32位通用寄存器
  2. 参数通常通过栈传递

x64

  1. 将原有8个寄存器扩展为64位(如RAX, RBX等,都是64位通用寄存器)
  2. RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP
  3. 新增8个64位寄存器(R8~R15)
  4. x64引入新的指令(如MOVSXD符号扩展指令)和优化,支持更大数据量和更高效操作
  5. 优先使用寄存器传递参数(如Windows用RCX, RDX, R8, R9),减少栈操作开销
  6. x64兼容x86指令集

虽然通通用寄存器可以随意使用,但是一般情况下,它们都自己的特殊用途

rsprbp分别是栈顶指针和栈底指针
rax一般用作存储方法的返回值
rcx一般用作存储程序计数器
rsirdi一般用作内存复制,一个目标地址,一个起始地址
eip用于存放cpu下一条要执行指令的地址

在这里插入图片描述

堆栈


一般在程序的运行过程中,会产生很多中间数据,这些中间数据就可以保存在栈空间中,栈是由操作系统在运行程序时自动创建的

常用指令:

PUSH:把一个内存地址中的数据,或者是立即数,寄存器中的值存入到栈空间,这时ESP的地址-4(x86)
POP:把当前栈顶指针ESP的值取出来,然后ESP+4(x86)

EIP


EIP寄存器存放着CPU要执行的下一条指令的地址

我们之前在更改通用寄存器时,可以使用 mov 指令来修改,但是在eip寄存器面前,并不允许使用mov指令来直接修改里面的值

可以使用JMP指令来变相的修改eip寄存器,jmp指令是无条件跳转指令,jmp后面跟着的地址就表示要跳转到后面地址上去执行,然而eip是存放cpu下一条指令要执行的地址,这样以来eip的值也会跟着改动(jmp指令做的事情仅仅只是修改eip中的值

常用指令:

JMP:jpm 寄存器/立即数/内存

特殊指令:CALL

call指令用来跳转到某一函数的执行位置,它同时修改esp和eip的值,把它的下一条指令压入栈,同时修改eip的值到要跳转的地址,esp-4

特殊指令:RET

ret指令用来返回当前执行的函数,esp+4,eip中的值就改为了esp中的值,也就是call指令的下一条地址

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

相关文章:

  • 字符串和内存函数(2)
  • MacBook M1 Pro下载安装MySql
  • Redis分布式缓存(RDB、AOF、主从同步)
  • force命令的使用
  • 图文教程——Deepseek最强平替工具免费申请教程——国内edu邮箱可用
  • 传统Web应用和RESTful API模式
  • javaee初阶-多线程
  • C++基础
  • Oracle集群OCR磁盘组掉盘问题处理
  • echart pie label.rich 颜色设置与项目同色
  • matlab红外与可见光图像配准算法
  • Flask 报错修复实战:send_file() got an unexpected keyword argument ‘etag‘
  • 什么是Power Distribution Unit(PDU)以及智能PDU:应用的演变历程
  • C#简单线程启动的几种方法总结
  • Windows平台网络通信
  • SQL Server 查询数据库中所有表中所有字段的数据类型及长度
  • 从“字对字“到“意对意“:AI翻译正在重塑人类的语言认知模式
  • 从代码学习深度学习 - 全局向量的词嵌入(GloVe)PyTorch版
  • 医疗行业双碳战略升维:从合规达标到价值创造的转型路径
  • JavaWeb(JavaBean预习)
  • 智慧园区智能化整体解决方案
  • c#实现绝对路径和相对路径的转换
  • 黑马python(四)
  • CentOS Stream 9——RustDesk基础版自建教程(Docker)
  • <script> 标签的 async 与 defer 属性详解
  • 《Linux C编程实战》笔记番外:如何避免子进程成为僵尸进程
  • 阿里云unbantu、Flask部署模型的一个错误
  • 安卓+苹果端签名教程
  • SiteAzure:文章删除后,前台还能搜索到
  • HarmonyOS - UIObserver(无感监听)