| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Ассемблерная операция операции OR в Delphi |
| Автор: Lexicss 6.9.2006, 00:24 | ||
| Очень важно знать как в ассемблерном представлении выглядит операциия OR. Частный случай.
Очень важно узнать во сколько ассемблерных операций раскладывается i := i or 1; делфи говорит что в одну "dword ptr [i],08" Но вот код операции состовляет 830D.401F.1D01.08 Почему он такой грамоздский? Тут явно не одна, а несколько пераций. Может кто точно подскажет кто разбирается? |
| Автор: Alexeis 6.9.2006, 00:34 |
| у меня 83 0D D4 FB 44 00 01 "or dword ptr [i],$01" все нормально 01 - число 1 D4 FB 44 00 - четырех байтовый адрес 83 0D - вероятно код операции OR |
| Автор: Alexeis 6.9.2006, 00:54 |
| не обманывает вот весь код процедуры полученый из WinHeX 33 С0 (xor eax, eax) A3 D4 FB 44 00 (mov [i], eax) 83 0D D4 FB 44 00 01 (or dword ptr [i],$01) C3 (ret) 90 (nop) 100% совпадает с указаным в делфи |
| Автор: Snowy 6.9.2006, 01:01 | ||
|
| Автор: Alexeis 6.9.2006, 01:04 |
| чет не то адресс 4,5 байта |
| Автор: Snowy 6.9.2006, 01:04 |
| Это процедуры. А без её обёртки и остаётся чистый or. Добавлено @ 01:05 Это не я 0 спереди дописал Это hiew Добавлено @ 01:08 Вобщем смысл понятен - столько байт из-за того, что or производится не над регистром, а над памятью, что требует 4-хбайтового указателя. |
| Автор: Snowy 6.9.2006, 01:10 |
| А сам or двухбайтовый из-за того, что тип данных dword. Для word и byte - он однобайтовый. Игого 2 байта or + 4 байта адрес + 1 байт значение (если оно байтовое, а не двордовое |
| Автор: oleg1973 6.9.2006, 01:12 | ||||
имеем
|
| Автор: Lexicss 6.9.2006, 08:35 | ||||||||
У меня эта операция выполняется в нескольких потоках, поэтому мне обязательно надо убедится, что эта команда в ассемблере выполняется в 1 одну команду ассемблера. Иначе если это не так, то будет лажа - тогда придётся применять синхронизирующмй объект. И деляю я всё БЕЗ оптимизации компилятора. Например, вот у меня была команда
delphi её машинным кодом распознаёт как 830D401F1D0108 Я набрал эту строку в интерпретаторе и мне выдало три команды. Не помню что, на работе это было, но было чё-то такое... or ....40 pop ... sbb ...08 Ну всё же, Народ, спасибо, что подсказали, не оставили без внимания. |
| Автор: dumb 6.9.2006, 10:44 | ||
если это единственное обращение к данной переменной, и оптимизация выключена, то можешь быть спокоен. "delphi генерирует такой машинный код..." - так правильнее говорить... "интерпретатор" был в 16-битном режиме. но об этом ты уже догадался, почитав дублирующую тему в Asm. |