2016-10-29 10 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

Инструкция ВЫЗОВ выталкивает 0000 0025 на стек и нагрузки 0000 0040 в EIP

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

RET insttruction выскакивает 0000 0025 из стека в EIP (стек шоу перед тем RET выполняет)

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

Я голосую, чтобы закрыть этот вопрос как не по теме, потому что SO не предназначен для подачи домашней работы. – Seki

ответ

8

EIP является указатель команд. Он указывает на выполнение следующей команды.

ESP - указатель стека. Это указывает на самое последнее нажатие на стек.

Это общие архитектурные регистры. Этот код просто демонстрирует, как работает функция call/return sequence.

+0

Можете ли вы объяснить, что вы подразумеваете под указателем инструкции? Я очень смущен этим регистром. Спасибо. –

+2

Мой ответ объяснен. Если этого было недостаточно, то я думаю, вам стоит рассмотреть возможность изучения книги по компьютерной архитектуре. –

+4

Код хранится в памяти, как и данные. Чтобы отслеживать текущий исполняемый код, CPU имеет регистр, в котором хранится адрес памяти инструкции, которая должна быть выполнена. Это EIP. –

 Смежные вопросы

  • Нет связанных вопросов^_^