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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.02.2024, 03:46   #1
Kronos913
Форумчанин
 
Регистрация: 10.02.2021
Сообщений: 627
По умолчанию Взять переменную из стека не забирая ее

Что я знаю:
Что команда Push отправит в стек значение регистра
А команда Pop вернет его обратно в регистр из стека, при этом стерев это из стека

Вопрос: как из стека вернуть что в регистр не стирая из стека (потому как позже нужно будет опять возвращать эти же данные в регистр)
Kronos913 вне форума Ответить с цитированием
Старый 03.02.2024, 05:33   #2
AbakBarama
Пользователь
 
Регистрация: 12.05.2011
Сообщений: 57
По умолчанию

mov eax, [esp]
Только причём здесь Delphi?
AbakBarama на форуме Ответить с цитированием
Старый 03.02.2024, 08:28   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Цитата:
Сообщение от AbakBarama Посмотреть сообщение
Только причём здесь Delphi?
Причем тут асм, если вопрос по дельфям?

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
Вопрос: как из стека вернуть что в регистр не стирая из стека (потому как позже нужно будет опять возвращать эти же данные в регистр)
Peek

Если вы хотите просто гулять по стеку, то, скорее всего, вам надо поменять структуру или алгоритм.
p51x вне форума Ответить с цитированием
Старый 03.02.2024, 13:24   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,550
По умолчанию

О каких регистрах идёт речь? У Делфи нет такого понятия, кроме как "прописной" и "строчный" в строках. Есть только в способах передачи параметров в процедуру или функцию, но не об этом ведь идёт речь. Так что регистры процессора - это низкоуровневое программирование = асм. http://www.delphibasics.ru/1Type.php
Ну если уж нашёлся этот пресловутый регистр и в него Pop-нули, то что стоит из него обратно Push-нуть - и в регистре будет то, что надо, и указатель стека на том же месте.
Чем больше читаю вопросы ТСа, тем больше поражаюсь глобальной грандиозности его замыслов.

Последний раз редактировалось digitalis; 03.02.2024 в 13:36.
digitalis на форуме Ответить с цитированием
Старый 04.02.2024, 14:19   #5
Vapaamies
Ваш К. О.
Участник клуба
 
Аватар для Vapaamies
 
Регистрация: 26.12.2012
Сообщений: 1,777
По умолчанию

Встроенный ассемблер (BASM) в Delphi создает видимый только в отладчике пролог и эпилог функции. В прологе значение ESP фиксируется в регистре EBP, что обеспечивает прозрачное обращение к переменным по имени из ассемблерного кода:
Код:
procedure MyProc(X, Y, Z: Integer; const Comment: string);
var
  Len: Integer;
asm
        MOV EAX, Comment // в отладчике будет что-то вроде MOV EAX, [EBP+8]
        MOV EAX, Len // MOV EAX, [EBP+4]
end;
Цифры могу путать, но суть понятна.
Vapaamies вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Описать процедуру Minmax(X, Y), записывает в переменную X минимальное из значений X и Y, а в переменную Y - максимальное kinash96 Помощь студентам 3 12.10.2013 19:49
взять переменную из файла Кольша PHP 11 17.01.2012 17:03
Какую переменную взять для IntToHex? Sanek777 Общие вопросы Delphi 1 21.09.2008 17:19
взять переменную из dll Roof Общие вопросы Delphi 15 27.08.2008 16:40