一道汇编语言题,望详细解释

设(AX)=1122H,(BX)=3344H,(CX)=5566H,(SP)=2000H,试分析下列程序段PUSHAXPUSHBXPUSHCXPOPAXPOPCX执行后,... 设(AX)=1122H,(BX)=3344H,(CX)=5566H,(SP)=2000H,试分析下列程序段
PUSH AX
PUSH BX
PUSH CX
POP AX
POP CX
执行后,AX BX CX SP中的内容各为多少 并画出堆栈变化示意图
展开
 我来答
Crack_Hack
2012-03-06 · TA获得超过148个赞
知道答主
回答量:30
采纳率:0%
帮助的人:32.3万
展开全部

你的图片已经上传!

好好学习天天向上! 

呵呵,真是不好意思。

ESP=1FFEH ,才对!

真是不好意思了。

ax,bx,cx,这些是16位的汇编寄存器。

EAX,EBX,ECX,是32位的汇编寄存器。我把ax,bx,cx,.....这些当成EAX,EBX......了,汇编来计算时所有入栈、出栈都是加的4。所以才错了。

它们入栈、出栈的占用空间的大小是不一样的。

16位的汇编是2字节,32位的是4字节所以搞错。

把图中的加、减4换成加减2就对了。 

当成32位的汇编了,push 一次。ESP-4

在16位汇编中:

push ax   sp-2     ;记住入栈-2,也就是分配16位,2个字节的空间,用来存放ax

push bx   sp-4

push cx   sp-6

pop  ax    sp-6+2  ax=5566H   ; 出栈一次,腾出2字节16位的空间,还给系统,系统回收。

pop  cx    sp-6+4  cx=3344H

sp=1FFCH

2字节=(16位)/(8位/1字节),即每8位为一个字节

正如注释的那样

ax 是16的寄存器,所以sp-2或+2.EAX是32的寄存器,那么ESP-4或ESP+4

做而论道
高能答主

2012-03-05 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部

楼上的回答有误。

结果应该是:

(AX) = 5566H、(BX) = 3344H、(CX) = 3344H、(SP) = 1FFEH。

每入栈一次,SP 应该减 2。

共入栈三次,出栈两次,故此 SP = 1FFEH。

入栈示意图如下。

追问
能不能把出栈示意图也画出来,我出栈不明白
追答
呵呵,出栈,你把入栈的图,倒着次序看,就行了。
也就是上图中,中间的两个图。
注意,出栈的时候是:SP = SP + 2。
----
楼上已经改正了,按照他现在的回答,就是正确的了。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
吴勇一家人
2012-03-05 · TA获得超过2407个赞
知道小有建树答主
回答量:304
采纳率:50%
帮助的人:74万
展开全部
2楼是对的。。。(AX) = 5566H、(BX) = 3344H、(CX) = 3344H、(SP) = 1FFEH
追问
能不能把过程详细解释一下,谢谢了
追答
根据后进先出原理,题目把第一个出栈的值赋值给AX,就是说把CX的值给了AX,同理的把bx的值赋值给CX啦,原先的AX、CX都被覆盖了,但BX没有出栈,所以并没被覆盖还是原先的值啊。。。。关于SP,寄存器都是以16位的2个字节的数据,进栈3次,SP:3X(—2)=—6,出栈2次,SP:2X2=4,3进2出,SP的最终变化是—6+4=—2进栈SP-2;出栈SP+2即是SP=2000h-2h=1FFEh
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式