| imho.ws |
![]() |
|
|
|||||||
|
Сообщения:
Перейти к новому /
Последнее
|
Опции темы |
|
|
# 1 |
|
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
Пишу на дельфе ридер кой-какого типа файлов. Данные там рассчитаны для MAC и PC - различие в порядке чтения байтов для 16-битных и 32-битных целых. Столкнулся с тем,
что в дельфе нет встроенной функции свопа длинного целого, зато такой оператор есть во встроенном асме. Вопрос - как правильно и коротко написать процедуру свопа длинного целого в данном случае на асме. Вот мой вариант, но ИМХО можно по другому. procedure Swp(var v: LongWord); function SW(Value: LongWord):LongWord; asm BSWAP EAX end; begin v:=SW(v); end; |
|
|
|
|
# 3 | |
|
Advanced Member
Регистрация: 09.03.2004
Адрес: толстозадая Москва
Сообщения: 498
![]() ![]() ![]() ![]() |
Цитата:
не так... ИМХО локальная переменная один хрен в EAX у тебя, а ты собираешься по адресу ее свопить, тады хоть пропиши так BSWAP LONGWORD PTR [EAX], но это тоже самое, если даже ввести дополнительную локальную переменную. Суть вопроса, как в ASM встаке присвоить результат именно var переменной Value, которая лежит в EAX как параметр. Последний раз редактировалось /7y3uK; 09.10.2004 в 00:43. |
|
|
|
|
|
# 4 |
|
Newbie
Регистрация: 21.07.2004
Адрес: Брест
Сообщения: 26
![]() |
гкхм... не посмотрел, что 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?
|
|
|