|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
27.08.2022, 17:10 | #1 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 644
|
Смена значения регистров при вызове процедуры
Вопрос такой: помимо регистров, в которые вносятся параметры, какие еще регистры меняют значение при вызове процедуры/функции?
|
27.08.2022, 17:15 | #2 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Что значит меняют? Меняют значения только регистры с аргументами, значения в остальных регистрах должны быть сохранены.
|
27.08.2022, 17:25 | #3 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 644
|
Вообще интересует такой вопрос: если процедура/функция вызывается только из ассемблерных процедур - то можно ли вообще не прописывать в ней никаких параметров, а перед ее вызовом просто вручную заполнить нужные регистры нужными данными?
Особенно если мне надо передать нужный параметр не через eax, а через edx Поскольку процедура проводит обработку результата остатка деления - чтобы не заниматься его перегоном из edx в eax и обратно |
27.08.2022, 17:26 | #4 |
Форумчанин
Регистрация: 10.02.2021
Сообщений: 644
|
А в момент вызова процедуры, как процессор запоминает, куда ему надо вернуться после окончания выполнения процедуры?
|
27.08.2022, 17:33 | #5 | |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
В языке ассемблера нету понятия процедура или функция. Есть точка(адрес) вызова. То что происходит начиная с этого адреса целиком и полностью проблемы программиста. Нет ни каких ограничений в рамках ассемблерного кода делать что угодно (не уверен позволит ли это делать Pascal). Например:
Код:
Цитата:
Для каждой ветви вашей программы выделяется свой собственный стек. Последний раз редактировалось macomics; 27.08.2022 в 17:36. |
|
27.08.2022, 17:58 | #6 |
Участник клуба
Регистрация: 17.04.2022
Сообщений: 1,833
|
Только сразу хочу оговориться. Я этот код привел только для примера. Не стоит его использовать. Для преобразования Dword в Hex есть более быстрые варианты реализации. Я мог бы расширить эту последовательность процедур/функций даже для Qword, но для них есть уже еще более быстрые варианты (sse). В целом это приведено только для примера.
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка при вызове процедуры MySQL | FaTa1iTy_777 | SQL, базы данных | 1 | 11.03.2015 11:00 |
Ошибка при повторном вызове хранимой процедуры. | dimorik | PHP | 12 | 10.11.2013 21:40 |
ошибка при вызове процедуры | Emperator12 | Общие вопросы Delphi | 8 | 22.09.2012 00:52 |
Параметры указываемые при вызове процедуры MouseDown | Karych | Общие вопросы Delphi | 4 | 23.03.2012 23:12 |
Error 424 - Object required, при вызове процедуры из DLL | penb | Microsoft Office Excel | 4 | 21.03.2012 21:18 |