![]() |
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; |
procedure swp(var Value: LongWord); assembler;
asm bswap [eax] end; |
Цитата:
не так... ИМХО локальная переменная один хрен в EAX у тебя, а ты собираешься по адресу ее свопить, тады хоть пропиши так BSWAP LONGWORD PTR [EAX], но это тоже самое, если даже ввести дополнительную локальную переменную. Суть вопроса, как в ASM встаке присвоить результат именно var переменной Value, которая лежит в EAX как параметр. |
гкхм... не посмотрел, что BSWAP воспринимает только значение в регистре... сорри.
procedure swp(var Value: LongWord); asm mov edx, [Value] bswap edx mov [Value], edx end; p.s.: никакой локальной переменной здесь нет, не надо наезжать. в eax у меня -- АДРЕС фактического аргумента, и при помощи [eax] я обращаюсь именно к фактическому аргументу. |
О, точно, ты прям глаза мне открыл....
Держи в репу, т.е. в весы. |
| Часовой пояс GMT +4, время: 00:13. |
Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.