关于上次对您的提问表示歉意!
因为在画堆栈图时把AX当成EAX了,在此表示歉意。
对你的回复已做了相应的更正,望即时查看。
首先,明白EAX是32位的寄存器,AB是16位的寄存器。分别需要4字节、2字节的堆栈空间。知道这个方便我们计算SP的值。sp是16位的。
一般是没有这样的代码的!在有EAX的系统中高位为AH低位为AL,不过没有关系,系统也会认识,这就是windows的向下兼容。ax是早期的16的操作系统用的,EAX是现在大家用的XP,还有64位的WIN7.
按您的意思....
代码分析如下:
PUSH EAX 入栈EAX,需4字节,故SP-4 00123456H入栈
PUSH AX 需2字节,故SP-4-2 00123456h ,入栈3456H 。
POP BX 废弃2字节,故SP-4-2+2 00123456 3456,出栈3456H,BX=3456H,EBX=0102 3456H
PUSH EBX 入栈EBX,需4字节,故SP-4-2+2-4 00123456 入栈 01023456H
PUSH CX 需2字节,故SP-4-2+2-4-4 00123456 01023456 入栈0108H
POP EAX 废弃2字节,故SP-4-2+2-4-4+4 00123456 01023456 0108 出栈34560108 AX=0108H,EAX =34560108H
POP CX 废弃2字节,故SP-4-2+2-4-4+4+2 00123456 0102 出栈0102 CX=0102H ECX=05060102H
因而 EAX=34560108H
EBX=01023456H
ECX=05060102H
SP=1FFAH
不要看答案,照我的思路计算下来就对了。
POP AX,出栈2字节,PUSH AX,入栈2字节,POP EAX 出栈4字节,PUSH EAX ,入栈4字节。
SP就是根据这个来变化的。
不管你采纳谁的答案,希望你采纳一个,这样才有人想帮您。
也希望这些能对你有一些帮助。上一个问题即时查看。
汇编是一门比较贴近硬件的语言。如果有机会查看相关书籍不要错过。盲目的学,会浪费你不少的时间。比如,堆栈究竟是什么?数据究竟怎么存放?为什么要这样放....Win32下可不像Win16..也许换个系统你就不会了.加油!
温馨提示:内容为网友见解,仅供参考