|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.08.2016, 22:55 | #1 | ||
Пользователь
Регистрация: 20.07.2013
Сообщений: 42
|
Как написать процедуру без пролога и эпилога
Пишу процедуру такого вида, но из-за наличия "begin-end;" компиллятор иногда, редко, создает пролог, а уж эпилог так это всегда. Поэтому команды "push-pop" внутри асм-вставок нарушают правильное выполнение процедуры. Вся байда у меня в том, что мне надо обязательно сохранить и потом восстановить регистр состояния (pushad-popad не обязательные, но желательные команды). Как заставить компиллятор не создавать пролог и эпилог в этой процедуре?
Цитата:
Цитата:
|
||
27.08.2016, 23:23 | #2 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
используйте второй вариант, а ваш код вынесите в отдельную процедуру и просто вызывайте ее.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
27.08.2016, 23:32 | #3 |
Пользователь
Регистрация: 20.07.2013
Сообщений: 42
|
Это конечно ответ. Но...
Я не стал писать весь код, надеясь получить ответ на МОЙ вопрос. В моем делфийском коде есть как-бы два выхода, и поэтому концовка асм-кода будет в первом случае такая как я привел, во втором, я сначала изменю регистры в стеке которые загнал туда командой pushad, а потом закончу стандартный код. Тут тогда появляется еще куча вопросов. 1. Как изменить стек в вынесенной процедуре? Ведь там точно появится эпилог и/или пролог. 2. Или как сделать два выхода из процедуры? Последний раз редактировалось Kuzya69; 27.08.2016 в 23:37. |
27.08.2016, 23:41 | #4 |
Лис
Старожил
Регистрация: 18.09.2015
Сообщений: 2,409
|
Пролог и эпилог генерируются вместе. Всегда в зависимости от наличия параметров и локальных переменных. Хотите без эпилога и пролога. Убирайте локальные переменные и параметры.
Что касатеся 2-х выходов. Так возьмите и сделайте в чём вопрос? jmp и goto вам в помощь. Концовку формируете вручную. Код:
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
У дзен программиста программа делает то что он хотел, а не то что он написал . |
27.08.2016, 23:41 | #5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
вы можете или полностью работать в асме, или промежуточное как в первом варианте.
во втором варианте вы можете лишь вызвать иные процедуры. вам никто не запрещает написать не процедуру, а некую функцию, по результату которой вы будете определять что делать в асме. Pavia, в принципе тоже вариант, но там могут быть нюансы из-за использования FPU, из-за разрядности и тп. Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
27.08.2016, 23:46 | #6 |
Пользователь
Регистрация: 20.07.2013
Сообщений: 42
|
Ага, точно, про функцию вместо процедуры я совсем не подумал.
Тогда попутный вопрос, Делфи всегда выводит Result в регистре eax? То-есть выходит, что нет ни директив, никаких трюков, чтобы избавиться от этих прологов-эпилогов, кроме как отказавшись от локальных переменных и параметров? И кстати, как быть-то, ведь мне нужно передать стек в вынесенную функцию. На основе данных стека, я решаю какой выход избрать. Придется завести глобальную запись под стек? Последний раз редактировалось Kuzya69; 27.08.2016 в 23:55. |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как написать процедуру в ДЕЛФИ?? | Wi1D | Помощь студентам | 10 | 24.02.2014 10:19 |
Как написать процедуру в Delphi 7 | Dominick1990 | Помощь студентам | 2 | 01.08.2012 16:09 |
незнаю как процедуру написать | Saka | Помощь студентам | 10 | 14.02.2010 20:37 |
Как написать свою процедуру? | theYozh | Помощь студентам | 10 | 08.03.2009 11:18 |
С помощью рекурсии без операторов цикла и перехода написать процедуру P(N) | WhyBeNormal | Помощь студентам | 1 | 29.01.2009 01:20 |