Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ассемблерная операция операции OR в Delphi, Из каких команд состоит OR 
V
    Опции темы
Lexicss
Дата 6.9.2006, 00:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 16.8.2006
Где: Беларусь, Минск

Репутация: нет
Всего: 1



Очень важно знать как в ассемблерном представлении выглядит операциия OR. 
Частный случай.
Код

var i : Cardinal   //-  глобальная переменная
i := 0;
i := i or 1;

Очень важно узнать во сколько ассемблерных операций раскладывается i := i or 1;
делфи говорит что в одну  "dword ptr [i],08"  
Но вот код операции состовляет 830D.401F.1D01.08   
Почему он такой грамоздский? Тут явно не одна, а несколько пераций. 
Может кто точно подскажет кто разбирается?
--------------------
Бери от жизни всё.
PM MAIL WWW ICQ Skype   Вверх
Alexeis
Дата 6.9.2006, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 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 вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Alexeis
Дата 6.9.2006, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 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 вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 6.9.2006, 01:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Код

or     d,[0011D1F40],008

PM MAIL   Вверх
Alexeis
Дата 6.9.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

Репутация: 109
Всего: 459



чет не то адресс 4,5 байта


--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Snowy
Дата 6.9.2006, 01:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(alexeis1 @  6.9.2006,  00:54 Найти цитируемый пост)
не обманывает вот весь код процедуры полученый из WinHeX
Это процедуры. А без её обёртки и остаётся чистый or.

Добавлено @ 01:05 
Цитата(alexeis1 @  6.9.2006,  01:04 Найти цитируемый пост)
чет не то адресс 4,5 байта
Это не я 0 спереди дописал smile
Это hiew smile

Добавлено @ 01:08 
Вобщем смысл понятен - столько байт из-за того, что or производится не над регистром, а над памятью, что требует 4-хбайтового указателя.
PM MAIL   Вверх
dumb
Дата 6.9.2006, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



аа.. вот он где, "источник зла". smile
для начала, Lexicss, не надо добавлять точки - эта "отсебятина" меняет смысл.

Цитата(Lexicss @  6.9.2006,  00:24 Найти цитируемый пост)
Очень важно знать как в ассемблерном представлении выглядит операциия OR. 

в ассемблерном представлении операция OR выглядит так:
Код

or


а в остальном - и количество инструкций и, соотв-но, их длина зависят от "настроения" компилятора(имеется ввиду оптимизация). а почему тебя этот вопрос так заинтересовал?
PM MAIL   Вверх
Snowy
Дата 6.9.2006, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



А сам or двухбайтовый из-за того, что тип данных dword. Для word и byte - он однобайтовый.
Игого 2 байта or + 4 байта адрес + 1 байт значение (если оно байтовое, а не двордовое smile )
PM MAIL   Вверх
oleg1973
Дата 6.9.2006, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


asm fanat
****


Профиль
Группа: Экс. модератор
Сообщений: 3283
Регистрация: 16.7.2003
Где: Italy

Репутация: 1
Всего: 34



Код

or eax,eax
or eax,0xffffffff
or [eax],dword 0xffffffff
or [0xffffffff],dword 0xffffffff   


имеем

Код

09С0
83С8FF
8108FFFFFFFF
810DFFFFFFFFFFFFFFFF




--------------------
SST 465555
icq 200-512-712
PM MAIL WWW ICQ   Вверх
Lexicss
Дата 6.9.2006, 08:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 197
Регистрация: 16.8.2006
Где: Беларусь, Минск

Репутация: нет
Всего: 1



Цитата(dumb @ 6.9.2006,  01:10)
аа.. вот он где, "источник зла". smile
для начала, Lexicss, не надо добавлять точки - эта "отсебятина" меняет смысл.

Цитата(Lexicss @  6.9.2006,  00:24 Найти цитируемый пост)
Очень важно знать как в ассемблерном представлении выглядит операциия OR. 

в ассемблерном представлении операция OR выглядит так:
Код

or


а в остальном - и количество инструкций и, соотв-но, их длина зависят от "настроения" компилятора(имеется ввиду оптимизация). а почему тебя этот вопрос так заинтересовал?

У меня эта операция выполняется в нескольких потоках, поэтому мне обязательно надо убедится, что эта команда в ассемблере выполняется в 1 одну команду ассемблера. Иначе если это не так, то будет лажа - тогда придётся применять синхронизирующмй объект.  И деляю я всё БЕЗ оптимизации компилятора. 
Например, вот у меня была команда 
Код

i := i or $8;

delphi её машинным кодом распознаёт как 830D401F1D0108
Я набрал эту строку в интерпретаторе и мне выдало три команды. Не помню что, на работе это было, но было чё-то такое...
or ....40
pop ...
sbb ...08

Ну всё же, Народ, спасибо, что подсказали, не оставили без внимания. 
--------------------
Бери от жизни всё.
PM MAIL WWW ICQ Skype   Вверх
dumb
Дата 6.9.2006, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


sceloglauxalbifacies
****


Профиль
Группа: Экс. модератор
Сообщений: 2929
Регистрация: 16.6.2006

Репутация: 13
Всего: 158



Цитата(Lexicss @  6.9.2006,  08:35 Найти цитируемый пост)
У меня эта операция выполняется в нескольких потоках, поэтому мне обязательно надо убедится, что эта команда в ассемблере выполняется в 1 одну команду ассемблера. Иначе если это не так, то будет лажа - тогда придётся применять синхронизирующмй объект.  И деляю я всё БЕЗ оптимизации компилятора. 

если это единственное обращение к данной переменной, и оптимизация выключена, то можешь быть спокоен. smile с тем, что это единичная инструкция, мы уже определились.

Цитата(Lexicss @  6.9.2006,  08:35 Найти цитируемый пост)
delphi её машинным кодом распознаёт как 830D401F1D0108

"delphi генерирует такой машинный код..." - так правильнее говорить... smile

Цитата(Lexicss @  6.9.2006,  08:35 Найти цитируемый пост)
Я набрал эту строку в интерпретаторе и мне выдало три команды. 

"интерпретатор" был в 16-битном режиме. но об этом ты уже догадался, почитав дублирующую тему в Asm. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0583 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.