汇编中,BP,SP有何区别?分别怎么使用?

bp寄存器,跟其它什么BX,AX一样的用法,

SP是用在栈上的,配合SS使用,像SS:SP

SS上放段地址,SP上放偏移地址。

寻址时,像[bp],相当于SS:[bp]

就是说它默认使用SS

像BX默认使用CS

---------------------------------------------------
ss栈段寄存器

sp栈顶指针寄存器

bp默认的栈寻址寄存器

---------------------------------------------------

sp会随着带有堆栈操作的指令(比如PUSH、CALL、INT、RETF)产生变化,

而BP不会,所以在带参数的子过程中用BP来获取参数和访问设在堆栈里面的临时变量。





汇编中,BP,SP有何区别?分别怎么使用?

时间: 2024-11-07 02:26:11

汇编中,BP,SP有何区别?分别怎么使用?的相关文章

汇编函数调用中bp和sp是指什么?

bp为基址寄存器,一般在函数中用来保存进入函数时的sp的栈顶基址sp是栈顶指针,它每次指向栈顶.每次子函数调用时,系统在开始时都会保存这个两个指针并在函数结束时恢复sp和bp的值.像下面这样:在函数进入时:push bp  //保存bp指针mov bp,sp //将sp指针传给bp,此时bp指向sp的基地址.这个时候,如果该函数有参数,则[bp+4]则是该子函数的第一个参数,[bp+6]则是该子函数的第二个参数,以此类推,有多少个参数则[bp+4+2^n]...........函数结束时:mov

16位汇编中的伪指令

汇编中的伪指令(基于汇编编译器MASM讲解) 一丶什么是伪指令,以及作用 首先我们用汇编开发效率低,如何才能开发效率高,甚至开发速度比C语言或这个高级语言快 答案: 伪指令 什么是伪指令 伪指令是汇编编译器提供的,比如昨天我们写的汇编代码,假设调用一个Call我们每次都要手工处理 保存栈底,开辟就变量空间,保存寄存器环境....每次都要做,特别麻烦,所以编译器帮我们提供了伪指令,只要我们 按照汇编编译器的语法去写,那么这些汇编编译器则会自动帮我们补全 比如昨天的代码: ;调用开始,把参数压栈 m

栈以及内存操作在汇编中的实现

一. 学习过程 要在计算机中用到一段存储空间,必须要知道两个信息:(1)存储空间在哪?(2)存储空间有多大.对于寄存器来说,只要给出寄存器的名字就可以了,因为每个寄存器在计算机中都是唯一的,而且寄存器大小是规定的.对于内存空间来说,就要给出地址和数据类型,数据类型就代表一个存储空间的大小. 以前学习C语言的时候,并没有仔细研究过,原来C语言中还可以以这种语法直接向内存单元中写入数据:*(char *)0x2000=’a’;向偏移地址为2000h的内存空间写入char型数据a.*(char far

汇编中的10H中断int 10h详细说明

汇编中的10H中断是由BIOS对显示器和屏幕所提供的服务程序.使用int 10h服务程序时,必须先指定ah寄存器为以下显示服务编号之一,以指定需要调用的功用.显示服务 (Video Service:int 10h) 00H:设置显示器模式 01H:设置光标形状 02H:设置光标位置 03H:读取光标信息 04H:读取光笔位置 05H:设置显示页 06H.07H:初始化或滚屏 08H:读光标处的字符及其 属性 09H:在光标处按指定属性显示字符 0AH:在当前光标处显示字符 0BH:设置调色板.背

汇编中的指令对齐

title: 汇编中的指令对齐 tags: ARM date: 2018-10-23 20:50:39 --- 汇编中的指令对齐 搜索下官方文档的索引.align,有如下描述,也就是有两种情况,对于ARM,表示的是末尾几个0,也就是2^x了.具体填充格式可以指定align abs-expr, abs-expr, abs-expr,参考链接 For other systems, including ppc, i386 using a.out format, arm and strongarm, i

SharePoint 2013中使用SP.UI.ModalDialog.showModalDialog时showModalDialog未定义的解决办法

本文讲述SharePoint 2013 中使用 SP.UI.ModalDialog.showModalDialog时 showModalDialog  未定义的问题. function DialogCallback(dialogResult, returnValue) { if (returnValue == '1') { alert("operation successfully"); } } var options = { url:'url', width: 600, height

汇编中Enter与Leave指令

Enter的作用相当==push ebp和mov ebp,esp 这后面两句大家很熟悉吧?函数开始一般都是这两句 Leave的作用相当==mov esp,ebp和pop ebp 而这后面这两句也很常见,函数调用完后一般的用到 以上的Enter和leave的作用分别函数开始和结束 Win32汇编中局部变量的使用方法可以解释一个很有趣的现象:在DOS汇编的时候,如果在子程序中的push指令和pop指令不配对,那么返回的时候ret指令从堆栈里得到的肯定是错误的返回地址,程序也就死掉了.但在Win32汇

汇编中的跳转指令

能修改CS以及IP的指令都是转移指令.它分为段内转移,段间转移. 段内转移:只修改IP的值 段间转移:同时修改CS以及IP的值 段内转移根据转移的距离远近分为:短转移,近转移 短转移:转移范围为-128 – 127 近转移:转移范围为-32768 –32767 根据转移情况又分为: 无条件转移指令 条件转移指令 循环指令 过程 中断 <1> jmp short xxx(行号) 这个是短转移指令,实现段内的转移,在翻译成机器码的时候,码内并没有目标地址,有的只是转移位移,这样做的好处就是防止目标

汇编中标号不加:的情况分析

对于汇编中标号不加:,如a db db a,b,c 等 标号都视为偏移地址,和转移指令地址的差不同,用标号时(除转移)就等于其偏移地址,安装时需要注意这个.