![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Lexicss |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 16.8.2006 Где: Беларусь, Минск Репутация: нет Всего: 1 |
Очень важно знать как в ассемблерном представлении выглядит операциия OR.
Частный случай.
Очень важно узнать во сколько ассемблерных операций раскладывается i := i or 1; делфи говорит что в одну "dword ptr [i],08" Но вот код операции состовляет 830D.401F.1D01.08 Почему он такой грамоздский? Тут явно не одна, а несколько пераций. Может кто точно подскажет кто разбирается? --------------------
Бери от жизни всё. |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
у меня 83 0D D4 FB 44 00 01
"or dword ptr [i],$01" все нормально 01 - число 1 D4 FB 44 00 - четырех байтовый адрес 83 0D - вероятно код операции OR Это сообщение отредактировал(а) alexeis1 - 6.9.2006, 01:10 -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
не обманывает вот весь код процедуры полученый из 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% совпадает с указаным в делфи -------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
|
|||
|
||||
| Alexeis |
|
|||
![]() Амеба Профиль Группа: Админ Сообщений: 11743 Регистрация: 12.10.2005 Где: Зеленоград Репутация: 109 Всего: 459 |
чет не то адресс 4,5 байта
-------------------- Vit вечная память. Обсуждение действий администрации форума производятся только в этом форуме гениальность идеи состоит в том, что ее невозможно придумать |
|||
|
||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
Это процедуры. А без её обёртки и остаётся чистый or.
Добавлено @ 01:05 Это не я 0 спереди дописал Это hiew Добавлено @ 01:08 Вобщем смысл понятен - столько байт из-за того, что or производится не над регистром, а над памятью, что требует 4-хбайтового указателя. |
|||
|
||||
| dumb |
|
||||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
аа.. вот он где, "источник зла".
для начала, Lexicss, не надо добавлять точки - эта "отсебятина" меняет смысл.
в ассемблерном представлении операция OR выглядит так:
а в остальном - и количество инструкций и, соотв-но, их длина зависят от "настроения" компилятора(имеется ввиду оптимизация). а почему тебя этот вопрос так заинтересовал? |
||||
|
|||||
| Snowy |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 11363 Регистрация: 13.10.2004 Где: Питер Репутация: 192 Всего: 484 |
А сам or двухбайтовый из-за того, что тип данных dword. Для word и byte - он однобайтовый.
Игого 2 байта or + 4 байта адрес + 1 байт значение (если оно байтовое, а не двордовое |
|||
|
||||
| oleg1973 |
|
||||
![]() asm fanat ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 3283 Регистрация: 16.7.2003 Где: Italy Репутация: 1 Всего: 34 |
имеем
-------------------- SST 465555 icq 200-512-712 |
||||
|
|||||
| Lexicss |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 197 Регистрация: 16.8.2006 Где: Беларусь, Минск Репутация: нет Всего: 1 |
У меня эта операция выполняется в нескольких потоках, поэтому мне обязательно надо убедится, что эта команда в ассемблере выполняется в 1 одну команду ассемблера. Иначе если это не так, то будет лажа - тогда придётся применять синхронизирующмй объект. И деляю я всё БЕЗ оптимизации компилятора. Например, вот у меня была команда
delphi её машинным кодом распознаёт как 830D401F1D0108 Я набрал эту строку в интерпретаторе и мне выдало три команды. Не помню что, на работе это было, но было чё-то такое... or ....40 pop ... sbb ...08 Ну всё же, Народ, спасибо, что подсказали, не оставили без внимания. --------------------
Бери от жизни всё. |
|||
|
||||
| dumb |
|
|||
![]() sceloglauxalbifacies ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2929 Регистрация: 16.6.2006 Репутация: 13 Всего: 158 |
если это единственное обращение к данной переменной, и оптимизация выключена, то можешь быть спокоен. "delphi генерирует такой машинный код..." - так правильнее говорить... "интерпретатор" был в 16-битном режиме. но об этом ты уже догадался, почитав дублирующую тему в Asm. |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |