Программирование на JAVA

Содержимое стека после сохранения в нем со­держимого регистра EDI показано на рис. 6.7, б. Адрес возврата в нашем приме­ре — это адрес команды MOV, непосредственно следующей в вызывающей про­грамме за командой CALL. Команда RET возвращает управление вызывающей программе, выталкивая из стека содержимое указателя команды EIP.


а


б

Рис. 6.7. Программа с рис. 5.8, переписанная в виде подпрограммы для процессоров IA-32; параметры передаются через регистры: вызывающая программа и подпрограмма (а);

содержимое стека после сохранения значения EDI в подпрограмме (б)

На рис. 6.8 показан еще один вариант этой же программы, в котором парамет­ры передаются подпрограмме через стек. Параметры NUM1 и N проталкиваются в стек двумя командами PUSH в вы­зывающей программе. После выполнения команды CALL вершина стека располагается на уровне 2. Регистры EDI, ЕАХ, ЕВХ и ЕСХ используются так же, как в подпрограмме на рис. 5.7. Их значения сохраняются в стеке, затем в них загру­жаются начальные значения и параметры. Эту работу выполняют первые 8 ко­манд подпрограммы. В результате вершина стека оказывается на уровне 3


<< назад вперед >>