Win32asm обучение


Урок 9 - Еще о кодах операций - часть 2


Смещение 1203 1204 1205 1206 1207 1208 1209 120A 120B
Значение 00 00 00 00 00 00 00 00 00
          ESP

       

(стек здесь заполнен нулями, но в действительности это не так, как здесь). ESP стоит в том месте, на которое он указывает)

mov ax, 4560h

push ax

Смещение 1203 1204 1205 1206 1207 1208 1209 120A 120B
Значение 00 00 60 45 00 00 00 00 00
      ESP  

       

mov cx, FFFFh

push cx

Смещение 1203 1204 1205 1206 1207 1208 1209 120A 120B
Значение FF FF 60 45 00 00 00 00 00
  ESP      

       

pop edx

Смещение 1203 1204 1205 1206 1207 1208 1209 120A 120B
Значение FF FF 60 45 00 00 00 00 00
          ESP

       

edx теперь 4560FFFFh.

CALL & RET

Команда call передает управление ближней или дальней процедуре с запоминанием в стеке адреса точки возврата.
Команда ret возвращает управление из процедуры вызывающей программе. Пример:

..code..

call 0455659

..more code..

Код с адреса 455659:

add eax, 500

mul eax, edx

ret

Когда выполняется команда call, процессор передает управление на код с адреса 455659, и выполняет его до команды ret, а затем возвращает управление команде следующей за call. Код который вызывается командой call называется процедурой. Вы можете поместить код, который вы часто используете в процедуру и каждый раз когда он вам нужен вызывать его командой call.

Подробнее: команда call помещает регистр EIP (указатель на следующюю команду, которая должна быть выполнена) в стек, а команда ret извлекает его и вовращается. Вы также можете определить аргументы, для вызываемой программы (процедуры). Это можно сделать через стек:

push значение_1

push значение_2

call procedure

Внутри процедуры, аргументы могут быть прочитаны из стека и использованы. Локальные переменные, т.е. данные, которые необходимы только внутри процедуры, также могут быть сохранены в стеке. Я не буду подробно рассказывать об этом, потому, что это может быть легко сделано в ассемблерах MASM и TASM. Просто запомните, что вы можете делать процедуры и что они могут использовать параметры.
Одно важное замечание:

регистр eax почти всегда используется для хранения результата процедуры.

Это также приминимо к функциям windows. Конечно вы можете использовать любой другой регистр в ваших собственных процедурах, но это стандарт.

[наверх]




- Начало -  - Назад -  



Книжный магазин