imho.ws
IMHO.WS  

Вернуться   IMHO.WS > Компьютеры > Программирование
Опции темы
Старый 07.10.2004, 01:09     # 1
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Question ASM + Delphi - передача и изменение var параметра.

Пишу на дельфе ридер кой-какого типа файлов. Данные там рассчитаны для MAC и PC - различие в порядке чтения байтов для 16-битных и 32-битных целых. Столкнулся с тем,
что в дельфе нет встроенной функции свопа длинного целого, зато такой оператор есть во встроенном асме. Вопрос - как правильно и коротко написать процедуру свопа длинного целого в данном случае на асме. Вот мой вариант, но ИМХО можно по другому.

procedure Swp(var v: LongWord);

function SW(Value: LongWord):LongWord;
asm
BSWAP EAX
end;

begin

v:=SW(v);

end;
/7y3uK вне форума  
Старый 08.10.2004, 23:53     # 2
Gem Single
Newbie
 
Аватар для Gem Single
 
Регистрация: 21.07.2004
Адрес: Брест
Сообщения: 26

Gem Single Путь к славе только начался
procedure swp(var Value: LongWord); assembler;
asm
bswap [eax]
end;
__________________
Spel chekers, hoo neeeds em?
Gem Single вне форума  
Старый 09.10.2004, 00:38     # 3
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
Цитата:
Gem Single:
procedure swp(var Value: LongWord); assembler;
asm
bswap [eax]
end;
[Error] MainUnit.pas(81): Invalid combination of opcode and operands

не так...
ИМХО локальная переменная один хрен в EAX у тебя, а ты собираешься по адресу ее свопить, тады хоть пропиши так BSWAP LONGWORD PTR [EAX], но это тоже самое, если даже ввести дополнительную локальную переменную. Суть вопроса, как в ASM встаке присвоить результат именно var переменной Value, которая лежит в EAX как параметр.

Последний раз редактировалось /7y3uK; 09.10.2004 в 00:43.
/7y3uK вне форума  
Старый 09.10.2004, 23:20     # 4
Gem Single
Newbie
 
Аватар для Gem Single
 
Регистрация: 21.07.2004
Адрес: Брест
Сообщения: 26

Gem Single Путь к славе только начался
гкхм... не посмотрел, что BSWAP воспринимает только значение в регистре... сорри.

procedure swp(var Value: LongWord);
asm
mov edx, [Value]
bswap edx
mov [Value], edx
end;

p.s.: никакой локальной переменной здесь нет, не надо наезжать.
в eax у меня -- АДРЕС фактического аргумента, и при помощи [eax] я обращаюсь именно к фактическому аргументу.
__________________
Spel chekers, hoo neeeds em?
Gem Single вне форума  
Старый 10.10.2004, 15:11     # 5
/7y3uK
Advanced Member
 
Аватар для /7y3uK
 
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498

/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)/7y3uK Реально крут(а)
О, точно, ты прям глаза мне открыл....
Держи в репу, т.е. в весы.
/7y3uK вне форума  

Опции темы

Ваши права в разделе
Вы НЕ можете создавать новые темы
Вы не можете отвечать в темах.
Вы НЕ можете прикреплять вложения
Вы НЕ можете редактировать свои сообщения

BB код Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +4, время: 03:08.




Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.