请问ss,bp,sp具体怎么配合使用啊

已知(SS)=2000H,(BP)=0016H,堆栈中有8个字节数据,问栈顶的物理地址是什么?
此时(sp)=?

谢谢

BP为基地址。SP为堆栈的偏移地址
SS是堆栈段地址
物理地址表示形式为SS:SP
所以如果不存放数据时物理地址为:SS:SP=2000h:0016h
当初放了8字节数据后(堆栈单元放的是16位数据)所以地址加4即SS:SP=2000h:001ah
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-05
要先知道堆栈的大小才能计算。SS指向的是堆栈段的起始地址,而不是堆栈的地址,用它加上堆栈的容量就得出栈底的位置,然后再减去堆栈中数据的个数,就得出SP的位置了。
BP主要在编写子程序时才用。因为子程序中经常使用局部变量,而局部变量的空间是在堆栈上申请的,这时就先让BP=SP,然后每定义一个局部变量,就把它压入堆栈。等子程序结束时,只要简单地一句mov sp, bp就可以从堆栈找到原先的返回地址,同时也归还了局部变量所占的空间。然后用ret指令,顺利返回。
相似回答