多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
[TOC] ## SS, SP, BP 三个寄存器 SS - 存放栈的段地址 SP - 堆栈寄存器SP(stack pointer)存放栈的偏移地址 BP - 基数指针寄存器BP(base pointer)是一个寄存器,它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到 - 如:**堆栈中压入了很多数据或者地址,你肯定想通过SP来访问这些数据或者地址,但SP是要指向栈顶的,是不能随便乱改的,这时候你就需要使用BP,把SP的值传递给BP,通过BP来寻找堆栈里数据或者地址** Win32汇编示例 ``` bp为基址寄存器,一般在函数中用来保存进入函数时的sp的栈顶基址 每次子函数调用时,系统在开始时都会保存这个两个指针并在函数结束时恢复sp和bp的值。像下面这样: 在函数进入时: push bp // 保存bp指针 mov bp,sp // 将sp指针传给bp,此时bp指向sp的基地址。 // 这个时候,如果该函数有参数,则[bp + 2*4]则是该子函数的第一个参数,[bp+3*4]则是该子函数的 第二个参数,以此类推,有多少个参数则[bp+(n-1)*4]。 ..... 函数结束时: mov sp,bp // 将原sp指针传回给sp pop bp // 恢复原bp的值。 ret // 退出子函数 ```