自学内容网 自学内容网

汇编(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指令的下一条地址


原文地址:https://blog.csdn.net/weixin_43754657/article/details/148554811

免责声明:本站文章内容转载自网络资源,如侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!