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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2015, 12:03   #1
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию Кто круче?

Дано:
Код:
procedure Push(const X; const Count: Integer);
var
  Index: Integer;
begin
  for Index:= Count - 1 downto 0 do
    asm push DWORD(X[Index]) end;
end;

procedure Pop(var X; const Count: Integer);
var
  Index: Integer;
begin
  for Index:= Count - 1 downto 0 do
    asm pop DWORD(X[Index]) end;
end;
Переделать в:
Код:
procedure Push(const X; const Count: Integer); assembler;
asm
  // блаблабла
end;

procedure Pop(var X; const Count: Integer); assembler;
asm
  // блаблабла
end;
Щас сам попробую, но может кто предложит свой хороший вариант?
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 31.07.2015, 12:27   #2
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

как-бы, может вообще выкинуть эти функции?

просто временный массив создать tempX[Index] = X[Index]. тогда X восстанавливать (Pop) не нужно.
или это такой извращенный метод изменения порядка следования элементов?

Последний раз редактировалось f.hump; 31.07.2015 в 12:29.
f.hump вне форума Ответить с цитированием
Старый 31.07.2015, 12:43   #3
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
или это такой извращенный метод изменения порядка следования элементов?
Я хотел сделать сохранение/восстановление переменных разных! типов без использования глобальных буферов, именно с помощью стека. Например, перед рисованием на TCanvas сохранять некоторые (не все) параметры его инструментов, таких как Pen.Color или Brush.Style, а после рисования - восстанавливать.
Понятное дело, что просто распихать по локальным переменным - много ума не надо, но когда параметров много, код превращается в километровое полотенце.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 31.07.2015, 13:05   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Метод WriteComponent попробовать не желаешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 31.07.2015, 13:12   #5
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

Цитата:
просто распихать по локальным переменным - много ума не надо, но когда параметров много, код превращается в километровое полотенце.
это правильный путь.

а procedure Push(const X; const Count: Integer) и procedure Pop(var X; const Count: Integer) я бы запостил в тему про говнокод.
f.hump вне форума Ответить с цитированием
Старый 31.07.2015, 13:34   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Метод WriteComponent попробовать не желаешь?
Не желаю. Мне не надо целую структуру сохранять/загружать 100 раз в секунду, мне надо это делать с несколькими 4-байтными переменными.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 31.07.2015, 13:39   #7
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
это правильный путь.
не надо так. Надо вот так:
это правильный путь, потому что:...
Пример кода прилагаю и расчёт.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 31.07.2015, 13:44   #8
f.hump
C/C++, Asm
Участник клуба
 
Аватар для f.hump
 
Регистрация: 02.03.2010
Сообщений: 1,323
По умолчанию

ок.

это правильный путь. потому что:
Цитата:
procedure Push(const X; const Count: Integer) и procedure Pop(var X; const Count: Integer) я бы запостил в тему про говнокод.
f.hump вне форума Ответить с цитированием
Старый 31.07.2015, 15:15   #9
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

только идея.
Код:
p:=GetMem(count);
copyMem(X, p, count);
push(p);
Код:
p:=Pop();
copyMem(p, X, count);
FreeMem(p);
впрочем нечто аналогичное уже высказывали
Цитата:
просто временный массив создать tempX[Index] = X[Index]. тогда X восстанавливать (Pop) не нужно.
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 31.07.2015, 15:25   #10
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
впрочем нечто аналогичное уже высказывали
Там нету никакого выигрыша. Мне надо что-то типа:
Код:
with Canvas do
  begin
    Push([Pen.Color, Pen.Width, Pen.Stype, Pen.Mode, Brush.Color, ... {блаблабла}]);
    // блаблабла куча вызовов всяких методов Canvas 
    Pop([Pen.Color, Pen.Width, Pen.Stype, Pen.Mode, Brush.Color, ... {блаблабла}])
  end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Плагины OllyDump для OllyDbg- какой из плагинов круче? Dimka-novitsek Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 29.08.2014 23:46
давайте вместе игру зделаем круче варкрафта Coel Свободное общение 24 27.02.2010 16:05
надо чтобы комп автоматически перезагружался, а ещё круче чтоб вырубался steck Общие вопросы Delphi 3 01.04.2007 15:52