【发布时间】:2017-09-27 08:24:31
【问题描述】:
我正在学习 x86 处理器的汇编语言,如果我回答正确,有 2 个问题希望您帮我看看。
- 关于示例代码运行时会发生什么,哪项陈述是正确的?
1: main PROC
2: mov edx, 0
3: mov eax, 40
4: push eax
5: call Ex5Sub
6: INVOKE ExitProcess, 0
7: main ENDP
8:
9:Ex5Sub PROC
10: pop eax
11: pop edx
12: push eax
13: ret
14:Ex5Sub ENDP
一个。 EDX 在第 6 行将等于 40
湾。程序将在第 13 行出现运行时错误而停止
C。 EDX 在第 6 行将等于 0
d。程序将在第 11 行出现运行时错误而停止
我的回答:(d) 因为只有一个元素 40 被推入堆栈,并且没有其他元素被弹出。
- 与此链接Assembly Language 2 Book on Push and Pop 中发布的第二个问题相同。我没有足够的声誉发表评论和询问。回答这个问题的人说(d),但我不明白为什么是(d),因为我从书中了解到,执行 pop eax 后,esp 将递增并指向以前的值,所以ret的时候应该是10。
感谢您耐心地向我解释。谢谢你
【问题讨论】:
-
安装 Visual Studio 并试用 :-) 问题来自 Irvine 的书。在他的主页上有安装和使用 VS 的提示:kipirvine.com/asm
-
感谢您告诉我这些信息和链接!
标签: assembly stack masm irvine32