2016-10-29 150 views
-4

使用下面的例子,ESP和EIP寄存器有什么区别?解释代码在做什么。ESP和EIP寄存器有什么区别

main PROC 
    0000 0020 call MySub 
    0000 0025 mov eax, ebx 
     . 
     . 
    main ENDP 

MySub PROC 
    0000 0040 mov eax, edx 
     . 
     . 
    ret 
MySub ENDP 

0000 0025被CALL指令

0000 0040以下的偏移量的指令的立即 被内部 MySub偏移中的第一条指令的

CALL指令推0000 0025压入堆栈,和 加载0000 0040到EIP中

|-------------|    |----------| 
| 0000 0025 |<--ESP  | 0000 0040| EIP 
|-------------|    |----------| 
|    | 
|-------------| 
|    | 
|-------------| 

的RET insttruction从堆栈到EIP 弹出0000 0025(堆栈显示RET执行之前)

|-------------|    |----------| 
| 0000 0025 |<--ESP  | 0000 0025| EIP 
|-------------|    |----------| 
|    | 
|-------------| 
|    | 
|-------------| 
+0

我投票结束这个问题作为题外话,因为你不打算提交你的作业。 – Seki

回答

8

EIP是指令指针。它指向要执行的下一条指令。

ESP是堆栈指针。它指向堆栈上最近推送的值。

这些是常见的架构寄存器。这段代码只是演示一个函数调用/返回序列如何工作。

+0

你能解释一下你的指令指针是什么意思吗?我对这个登记册感到困惑。谢谢。 –

+2

我的答案解释。如果这是不够的,那么我认为你应该考虑检查一本关于计算机体系结构的书。 –

+4

代码存储在内存中,就像数据一样。为了跟踪当前正在执行的代码,CPU有一个寄存器,用于存储即将执行的指令的内存地址。这是EIP。 –