汇编堆栈基础问题

来源:百度知道 编辑:UC知道 时间:2024/05/27 17:02:29
看到网上一篇文章介绍堆栈知识有这样一段:
取个代码例子:
(1) mov ecx, 100<---------100传入ecx
(2) mov eax, 200<---------200传入eax
(3) push eax <------------ecx先进了
(4) push ecx<-------------再来是eax
(5) pop ebx<--------------从栈顶取出一个,也是最后进去的那一个,结果存到ebx
(6) pop ecx<--------------从栈顶取出一个,也就是刚刚先进去的那个了,结果存到ecx
最后ebx=200,ecx=100

可是我认为最后应该是ebx=100,ecx=200不知道我说的对不。

嗯,你说的是正确的。我也这样认为,那文章应该有错误

看到网上一篇文章介绍堆栈知识有这样一段:
取个代码例子:
(1) mov ecx, 100<---------100传入ecx
(2) mov eax, 200<---------200传入eax
(3) push eax <------------ecx先进了
(4) push ecx<-------------再来是eax
(5) pop ebx<--------------从栈顶取出一个,也是最后进去的那一个,结果存到ebx
(6) pop ecx<--------------从栈顶取出一个,也就是刚刚先进去的那个了,结果存到ecx
最后ebx=200,ecx=100

请看3/4两句 操作和解释不符 假如把3和4两句的指令倒一倒 题目就没有错了。

(3) push eax <------------ecx先进了
(4) push ecx<-------------再来是eax
这个地方注释有点问题吧。
(3) push eax <------------eax先进了
(4) push ecx<-------------再来是ecx

这两句执行后堆栈中应该是:
100
200

所以最后弹出后EBX=100 ECX=200.