汇编里push入栈的栈顶物理上位于哪里?入栈后栈顶指针为什么应该减一?

如题所述

在8086汇编里,push入栈的栈顶,物理上的地址由段地址寄存器SS和堆栈指针寄存器SP确定。字节型数据入栈后栈顶指针减一,一方面为下次堆栈操作做准备,另一方面说明堆栈的结构是自底向上的。注意,堆栈指针根据指令操作数自动调整,但不见得一定是加减1.
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-09-04
堆栈计算,是从上数的吧?记不清了追问

可以说寄存器内的栈顶指针指向的其实是内存的最后一个单元吗?

汇编里push入栈的栈顶物理上位于哪里?入栈后栈顶指针为什么应该减...
在8086汇编里,push入栈的栈顶,物理上的地址由段地址寄存器SS和堆栈指针寄存器SP确定。字节型数据入栈后栈顶指针减一,一方面为下次堆栈操作做准备,另一方面说明堆栈的结构是自底向上的。注意,堆栈指针根据指令操作数自动调整,但不见得一定是加减1....

汇编语言中PUSH为什么导致SP减2而不是加2,SP不是指向栈顶么,入栈怎么...
栈在内存中实际存储结构是栈底在高地址,栈顶在低地址,所以就是你说的那样了

汇编(关于PUSH的SP问题)
PUSH入栈操作,遵守FILO原则(first in last out),而且必须是字操作,MOV AX,N1 PUSH AX 这是第一次进行压栈,SP=SP-2,存储器是8位的,而AX是16位的,高八位即AH存在高地址,而低八位AL存在低地址,SS=3000H,SP-2=00FEH 物理地址=SS*10H+SP=300FEH MOV AX,N2 PUSH AX 同理SP=SP-...

汇编语言中的PUSH的用法
即先修改堆栈指针SP(压入时为自动减2),然后,将指定 的操作数送入新的栈顶位置。此处的((SP))<--OPRD,也可以理解为:[(SS)*16+(SP)]<--OPRD 或 [SS:SP]<--OPRD 示例:PUSH DX PUSH BP PUSH CS PUSH DATA1 PUSH ALFA[BX][SI]注意:每进行一次压入操作,都压入一个字(16位)。

关于入栈,出栈指针和数据操作顺序的疑问
因为你的栈底是无限的,你压入一个元素,新的元素就取代先前的栈顶元素占据栈顶的位置,那么你先前的指向栈顶元素的指针这个时候就该修改让它指向这个新的栈顶元素了。下面的就是对“无底洞”型堆栈的一种实现的描述:压栈(入栈):将对象或者数据压入栈中,更新栈顶指针,使其指向最后入栈的对象...

汇编语言的几个简单指令,并附上中文解释
PUSH 入栈指令及POP出栈指令: 堆栈操作是以"后进先出"的方式进行数据操作.PUSH SRC \/\/Word 入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器. 入栈时高位字节先入栈,低位字节后入栈. POP DST \/\/Word 出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄...

push是什么指令
栈具有记忆作用,对栈的插入与删除操作中,不需要改变栈底指针。栈是允许在同一端进行插入和删除操作的特殊线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。插入一般称为进栈(PUSH),删除则称为退栈(POP)。栈...

汇编语言中,出栈后 出栈的那个数值在栈中会被清零吗?
大致意思如下:Pop指令从栈顶加载值到目标操作数指定的位置,然后增加栈顶指针。目标操作数可以是一个通用寄存器,内存位置或者段寄存器。可以看到,手册中并没有提到出栈后Pop要清空原有位置的值。因为这是不必要的,正常使用栈的话,出栈后那个位置的数值对栈没有影响,在栈增长后,那个位置可能会被新...

汇编出栈入栈的顺序问题
入栈的顺序是:PUSH AX PUSH SI出栈时:POP SI POP AX

汇编push和pop指令
push寄存器:将指定寄存器的内容压入栈顶。pop寄存器:从栈顶弹出数据到指定寄存器中。下面通过一段汇编代码演示栈操作的实现过程,代码使用MASM编辑器进行编写(假设使用了王爽的环境配置)。假设选择10000H至10000FH的内存空间作为栈区,初始状态下栈为空。设置寄存器ax和bx的值,然后使用push指令将ax和bx...

相似回答