关于 Push 和 Pop 的汇编语言 2 书
Assembly Language 2 Book on Push and Pop
第一题
关于示例代码运行时会发生什么,下列哪项说法是正确的?
1: main PROC
2: mov eax,30
3: push eax
4: push 40
5: call Ex3Sub
6: INVOKE ExitProcess,0
7: main ENDP
8:
9: Ex3Sub PROC
10: pusha
11: mov eax,80
12: popa
13: ret
14: Ex3Sub ENDP
一个。 EAX 将在第 6 行等于 40
b。该程序将在第 6 行出现运行时错误而停止
c。 EAX 将在第 6 行等于 30
d。该程序将在第 13 行出现运行时错误而停止
第二个问题
关于示例代码运行时会发生什么,下列哪项说法是正确的?
1: main PROC
2: push 10
3: push 20
4: call Ex2Sub
5: pop eax
6: INVOKE ExitProcess,0
7: main ENDP
8:
9: Ex2Sub PROC
10: pop eax
11: ret
12: Ex2Sub ENDP
一个。 EAX 将在第 6 行等于 10
b。该程序将因第 10 行的运行时错误而停止
c。 EAX 将在第 6 行等于 20
d。该程序将在第 11 行出现运行时错误而停止
1.通过查看这个,我认为 EAX 在第 6 行的末尾仍然等于 30,因为 eax 只是被压入堆栈而不是 value
的变化
2。由于 LIFO(后进先出),我认为这会等于 10。 EAX 等于 10,因为它是最后一个 in.
这是一个新概念,如有任何帮助,我们将不胜感激。
你答对了第一个。第二个比较棘手,它很可能会在第 11 行崩溃(答案 d
)。这是因为在 Ex2Sub
中,pop eax
从堆栈中删除了最顶层的项目,即 return 地址。因此,当 ret
尝试执行相同操作时,它将看到下一项,即 20
并且不太可能是正确的代码地址。
第一题 关于示例代码运行时会发生什么,下列哪项说法是正确的?
1: main PROC
2: mov eax,30
3: push eax
4: push 40
5: call Ex3Sub
6: INVOKE ExitProcess,0
7: main ENDP
8:
9: Ex3Sub PROC
10: pusha
11: mov eax,80
12: popa
13: ret
14: Ex3Sub ENDP
一个。 EAX 将在第 6 行等于 40
b。该程序将在第 6 行出现运行时错误而停止
c。 EAX 将在第 6 行等于 30
d。该程序将在第 13 行出现运行时错误而停止
第二个问题 关于示例代码运行时会发生什么,下列哪项说法是正确的?
1: main PROC
2: push 10
3: push 20
4: call Ex2Sub
5: pop eax
6: INVOKE ExitProcess,0
7: main ENDP
8:
9: Ex2Sub PROC
10: pop eax
11: ret
12: Ex2Sub ENDP
一个。 EAX 将在第 6 行等于 10
b。该程序将因第 10 行的运行时错误而停止
c。 EAX 将在第 6 行等于 20
d。该程序将在第 11 行出现运行时错误而停止
1.通过查看这个,我认为 EAX 在第 6 行的末尾仍然等于 30,因为 eax 只是被压入堆栈而不是 value
的变化2。由于 LIFO(后进先出),我认为这会等于 10。 EAX 等于 10,因为它是最后一个 in.
这是一个新概念,如有任何帮助,我们将不胜感激。
你答对了第一个。第二个比较棘手,它很可能会在第 11 行崩溃(答案 d
)。这是因为在 Ex2Sub
中,pop eax
从堆栈中删除了最顶层的项目,即 return 地址。因此,当 ret
尝试执行相同操作时,它将看到下一项,即 20
并且不太可能是正确的代码地址。