新手请教,汇编中只出栈,没有进栈,会怎样

[复制链接]
查看11 | 回复5 | 2012-11-28 09:42:01 | 显示全部楼层 |阅读模式
pop指令本身并不会造成CS和IP跳到别的地方,它只是单纯地起到将SS:SP所指的内存内容送入你指定的目的地址并同时修改SP的值的作用。你的程序会跳到别处,是因为你在其它地方使用堆栈的时候,比如子程序中最后的RET,由于你堆栈数据关系错位,导致返回时没有能获得当初你CALL时压入堆栈的正确的返回地址,而将别的错误的数当成了返回地址的原因。一般说来,使用堆栈时,必须由编程者自己考虑好堆栈里的数据是如何使用的,要通过程序指令的运用,保证你弹出的是你需要的那个数,而不是别的数。这就要求在使用堆栈时应当PUSH进一个就对应POP出栈一个(我称它为平衡操作),且必须是先进的数后出。建议你在分析程序运行时自己画一个堆栈中数据内容的示意图进行...
回复

使用道具 举报

千问 | 2012-11-28 09:42:01 | 显示全部楼层
堆栈段的压栈和出栈只受SS:SP的影响。而执行操作是由代码段来执行命令的,代码段你忘了吗? CS:IP所以你看到的cs和ip在改变实际是在执行代码命令。注意压栈和出栈配合使用。一压一出,先进后出。加个联系方式,一起学。我也才学习。刚学到7章节。...
回复

使用道具 举报

千问 | 2012-11-28 09:42:01 | 显示全部楼层
计算机只认识数据的你如果程序中不push,就把程序自己的代码数据就pop出去了那么后面计算机碰到需要计算cs和ip的情况,计算的就是剩下的另外的数据了计算的数据都不对了,当然会跳到别的地方去...
回复

使用道具 举报

千问 | 2012-11-28 09:42:01 | 显示全部楼层
如果调用了 中断 或者 子函数 堆栈是用来保护现场的但是你pop 把现场破坏了 所以会到处乱跳...
回复

使用道具 举报

千问 | 2012-11-28 09:42:01 | 显示全部楼层
你没有贴出具体代码来,也不好分析啊。问这种问题最好有代码 , 不然神仙也不知道喽。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行