寄存器
寄存器
寄存器是计算机暂存指令、数据和地址的地方.
常用寄存器及其功能整理
- RIP:程序计数寄存器,来存放下一条即将用来执行的指令的地址,它决定程序执行的流程。(较常用)
- RBP:栈基寄存器,存放当前栈帧的栈底地址(较常用)
- RAX:通用寄存器。存放函数返回值
- RSP:栈顶寄存器,存放当前栈帧的栈顶地址(较常用)
- RAX:随机存取寄存器
- AX:累加寄存器,分为AH高八位和AL低八位
- AH:累加寄存器,AX(16位)寄存器的高八位
- AL:累加寄存器,AX(16位)寄存器的低八位
- EAX:累加寄存器,是很多加法乘法指令的缺省寄存器
- EBX:基地址寄存器,在内存寻址时存放基地址
- ECX:计数器
- EDX:数据寄存器,被用于来放整数除法产生的余数
- ESI:源变址寄存器
- EDI:目的变址寄存器
- EBP:扩展基址指针寄存器,EBP来存储当前函数状态的基地址,在函数运行时不变,可以用来索引|确定函数参数或局部变量 的位置。(较常用)
- ESP:栈指针寄存器,ESP用来存储函数调用栈的栈顶地址,在压栈和退栈时 发生变化。(较常用)
- EIP:指令指针寄存器,EIP用来存储即将执行的程序指令的地址, cpu依照EIP的存储内容读取指令并执行,EIP 随之指向相 邻的下一条指令,如此反复,程序就得以连续执行指令。(较常用)
寄存器大小
- 64位cpu对应RSP(栈顶寄存器),RBP(栈基寄存器),RIP(程序计数寄存器)三个寄存器。
- 32位cpu则对应ESP(栈指针寄存器),EBP(扩展基址指针寄存器),EIP(指令指针寄存器)三个寄存器。
- R开头:64bit, 8字节(1字节=8bit)
- E开头:32bit, 4字节
- EAX(累加寄存器)是32位, AX 是EAX的低16位 , AL 和AH是AX的低8位和高8位。
- AX,BX,CX:16bit, 2字节
- AH, AL: 8bit, 1字节
附加知识
- BX是基(base)地址寄存器:四个寄存器中唯一可作为存储器指针使用的寄存器。
- CX寄存器是计数(count)寄存器:在字符串操作和循环操作时,用它来控制重复循环操作次数。在移位操作时,cl寄存器用来保存移位的位数。
- BP和SP寄存器称为指针寄存器:BP主要用于给出堆栈中数据区基址的偏移,从而方便地实现直接存取堆栈中的数据,所以BP也称为基指针寄存器,正常情况下SP只作为堆栈指针使用,即保存堆栈栈顶地址的偏移。
参考资料
本文作者:
Bolerat
本文链接: https://bolerat.github.io/posts/7491/
版权声明: 本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
本文链接: https://bolerat.github.io/posts/7491/
版权声明: 本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!