Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.08.2022, 17:10   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию Смена значения регистров при вызове процедуры

Вопрос такой: помимо регистров, в которые вносятся параметры, какие еще регистры меняют значение при вызове процедуры/функции?
Kronos913 вне форума Ответить с цитированием
Старый 27.08.2022, 17:15   #2
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Что значит меняют? Меняют значения только регистры с аргументами, значения в остальных регистрах должны быть сохранены.
macomics вне форума Ответить с цитированием
Старый 27.08.2022, 17:25   #3
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

Вообще интересует такой вопрос: если процедура/функция вызывается только из ассемблерных процедур - то можно ли вообще не прописывать в ней никаких параметров, а перед ее вызовом просто вручную заполнить нужные регистры нужными данными?

Особенно если мне надо передать нужный параметр не через eax, а через edx

Поскольку процедура проводит обработку результата остатка деления - чтобы не заниматься его перегоном из edx в eax и обратно
Kronos913 вне форума Ответить с цитированием
Старый 27.08.2022, 17:26   #4
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 624
По умолчанию

А в момент вызова процедуры, как процессор запоминает, куда ему надо вернуться после окончания выполнения процедуры?
Kronos913 вне форума Ответить с цитированием
Старый 27.08.2022, 17:33   #5
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

В языке ассемблера нету понятия процедура или функция. Есть точка(адрес) вызова. То что происходит начиная с этого адреса целиком и полностью проблемы программиста. Нет ни каких ограничений в рамках ассемблерного кода делать что угодно (не уверен позволит ли это делать Pascal). Например:
Код:
Dword2Hex:
push eax
rol eax, 16
call Word2Hex
pop eax

Word2Hex:
rol ax, 8
call Byte2Hex
rol ax, 8

Byte2Hex:
push eax
shr eax, 4
call Nible2Hex
pop eax

Nible2Hex:
and al, 15
cmp al, 10
sbb al, 105
das
mov [ebx], al
inc ebx
retn
Все 4 метки это процедуры/функции, которые принимают следующие параметры eax/ax/al/al - число; ebx - указатель на буфер для сохранения

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
А в момент вызова процедуры, как процессор запоминает, куда ему надо вернуться после окончания выполнения процедуры?
Использует стек, который заблаговременно выделила система для работы только вашей программы и указатель на блок памяти которого находится в регистре esp

Для каждой ветви вашей программы выделяется свой собственный стек.

Последний раз редактировалось macomics; 27.08.2022 в 17:36.
macomics вне форума Ответить с цитированием
Старый 27.08.2022, 17:58   #6
macomics
Участник клуба
 
Регистрация: 17.04.2022
Сообщений: 1,833
По умолчанию

Только сразу хочу оговориться. Я этот код привел только для примера. Не стоит его использовать. Для преобразования Dword в Hex есть более быстрые варианты реализации. Я мог бы расширить эту последовательность процедур/функций даже для Qword, но для них есть уже еще более быстрые варианты (sse). В целом это приведено только для примера.
macomics вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при вызове процедуры 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