Продолжаю погружаться в глубины ассемблера и разбирать, как работают некоторые команды процессора. Сегодня разберём по косточкам команду CALL, которая выполняет вызов процедуры. Читать далее… 👉 https://dzen.ru/media/baseprogramming/alternativa-call-6440aa72b06d751a6506d68d
Альтернатива CALL
https://dzen.ru/media/baseprogramming/alternativa-call-6440aa72b06d751a6506d68d
Продолжаю забавы с ассемблером. Предыдущая статья из этой серии здесь. А сегодня о том, каким набором инструкций можно заменить команду CALL. Эта команда выполняет вызов процедуры. А замена её с помощью набора других команд поможет понять, как выполняется вызов процедуры в ассемблере и что при этом происходит. Итак, сначала пример с обычным вызовом процедуры: А теперь вызовем ту же процедуру, но без использования CALL: Как видите, всё достаточно просто. Нам надо лишь в том месте, где была CALL, создать какую-то метку (в нашем примере это ProcRET), которая будет использоваться как адрес возврата в программу из процедуры. А перед этой меткой добавить три команды. Первые две помещают в стек адрес возврата из процедуры, а третья выполняет безусловный переход на процедуру. Таким образом, эта часть программы будет работать так: Ну вот как-то так… На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.
vk3847689 April 23, 2023, 00:10 А, ret каким образом вытаскивае? из стека можно и копировать без освобождения, при том с любого места, а насколько я знаю любой push всегда подразумевает последующий обязательный рор.
vk-84357659 April 23, 2023, 01:57 [id3847689|Сергей], в этом и суть. Никто не может вас обязать применять РОР после PUSH. Этим можно пользоваться, если надо.
Автор: Основы программирования