汇编里的"PUSH"和"POP"起了什么功能,,谁能用通俗点的话告诉我吗??

PUSH是不是起到分组把寄存器里的数据保存起来啊?如:EAX=1,EBX=2,ECX=3,PUSH1EAX=11,EBX=12,ECX=13,PUSH11结果是不是下面的... PUSH是不是起到分组把寄存器里的数据保存起来啊?
如:
EAX=1,EBX=2,ECX=3,PUSH 1
EAX=11,EBX=12,ECX=13,PUSH 11
结果是不是下面的啊?
POP 1,,就是EAX=1,EBX=2,ECX=3,
POP 11,,就是EAX=11,EBX=12,ECX=13,
展开
 我来答
仁昌爱娱乐
高粉答主

2020-05-17 · 专注关心娱乐
仁昌爱娱乐
采纳数:760 获赞数:459813

向TA提问 私信TA
展开全部

SH”指令的功能是实现将一个寄存器中的数据压入栈操作。PUSH的操作过程是: (SP)(SP)-2,((SP))<-OPRD。先修改堆栈指针SP(压入时为自动减2),然后,将指定的操作数送入新的栈顶位置。

汇编里的"POP"指令的功能是实现将一个寄存器中的数据弹出栈操作。POP的操作过程是:将堆栈段中当前SS:SP所指的字内容弹出到某个寄存器或段寄存器或内存单元。再 SP←SP+2。

扩展资料:

PUSH和POP指令对状态标志位没有影响。"PUSH"指令每进行一次压入操作,都压入一个字(16位)。OPRD为16位(字)操作数,可以是寄存器或存储器操作数。

若段描述符中的D\B位为1,则栈操作将使用ESP寄存器。先将ESP数值减去栈数据的长度 sub esp,register's long.(sizeof register)。再将数据压入栈:mov ss:[esp],register。

若段描述符中的D\B位为0,则栈操作将使用SP寄存器。先将SP数值减去栈数据的长度 sub sp,register's long.(sizeof register)再将数据压入栈:mov ss:[sp],register。

songwanqiang
推荐于2017-11-24 · TA获得超过2399个赞
知道小有建树答主
回答量:603
采纳率:0%
帮助的人:939万
展开全部
进出栈,栈是FILO(first in last out),先进后出
也就是把寄存器里的数据临时保存一下,相当与一个仓库
不是你说的那样子

假设eax=4,ebx=5
push eax
push ebx
pop eax
pop ebx
结果eax=5 ebx=4(体现了先进后出)
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鲲鹏展翅LHY
2007-09-21 · TA获得超过2637个赞
知道小有建树答主
回答量:642
采纳率:0%
帮助的人:968万
展开全部
堆栈是一端固定,另一端变化的特殊存储空间,你可以把它想像成装固体的桶,桶底(栈底)固定,桶里面所装固体的最高处定义为桶顶(栈顶)。如果什么都没有装时,桶顶和桶底相等,当装一层沙子后,桶顶升高(即栈顶地址-2,相当于入栈PUSH),再装一层水泥,桶顶再次升高,(即栈顶地址又-2),当你往出倒东西的时候,你先倒出最上层的水泥,桶顶下降(即栈顶地址+2,相当出栈POP),然后你才能倒出沙子。所以堆栈是先进来的先出去。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雍朔4L
2007-09-20
知道答主
回答量:22
采纳率:0%
帮助的人:0
展开全部
push和pop是堆栈操作指令,push [reg]/[num] 是将reg寄存器中的值或是数字num压入堆栈中,而pop [reg]是将堆栈栈顶的值弹出到reg寄存器中,并将这个值从堆栈中删去.
堆栈可以看成是一个数组,但只能在栈顶(可以认为是数组的一端)对数据进行操作,起临时保存数据的作用,32位汇编中,ss:esp指向堆栈栈顶,16位则是ss:sp.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
mission19
2007-09-19
知道答主
回答量:62
采纳率:0%
帮助的人:0
展开全部
我也不懂。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式