Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.03.2010, 10:54   #1
Sergey.Voloxov
Пользователь
 
Регистрация: 21.01.2010
Сообщений: 11
По умолчанию Определение размера операнда и адреса

Привет всем.

Я тут пытаюсь свой дизассемблер сварганить на C++. Программа определяет префиксы и опкоды, но дальше возникает проблема.
Как определить размер операнда и адреса(opreand size, address size)?
Для примера рассмотрим опкод ADD 03H. Согласно интеловской спецификации он имеет 2 операнда : Gv, Ev.
Буквы означают следующее:
Код:
E -  A ModR/M byte follows the opcode and specifies the operand. The operand is
either a general-purpose register or a memory address. If it is a memory
address, the address is computed from a segment register and any of the
following values: a base register, an index register, a scaling factor, a
displacement.

G The reg field of the ModR/M byte selects a general register (for example, AX
(000)).

v Word, doubleword or quadword (in 64-bit mode), depending on operand-size
attribute.
С заглавными буквами все понятно, а вот как определить это все-таки ВОРД, ДВОРД или КВОРД?

Пока точно не разобрался, но по-моему, этот размер определяется динамически(всякие флаги , регистры с размерами...). Но пишут же люди дизассемблеры. Не думаю, что для этого надо отслеживать предидущие комманды.

Заранее спасибо.
Sergey.Voloxov вне форума Ответить с цитированием
Старый 06.03.2010, 17:42   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Префиксы размера адреса и операнда, биты в mod r/m, специфическая командп
p51x вне форума Ответить с цитированием
Старый 06.03.2010, 19:30   #3
Sergey.Voloxov
Пользователь
 
Регистрация: 21.01.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Префиксы размера адреса и операнда, биты в mod r/m, специфическая командп
А можно поподробнее?

Говорят, что в 64bit mode размер операнда какой-нибудь команы 32 а в compatibility mode- 16 битов. Но ведь прога может динамически перейти из 64 битового режима в компат режим. Как с этим справиться?
Sergey.Voloxov вне форума Ответить с цитированием
Старый 06.03.2010, 22:58   #4
Sergey.Voloxov
Пользователь
 
Регистрация: 21.01.2010
Сообщений: 11
По умолчанию

Bump!!!!))))
Sergey.Voloxov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
собрать команду из кода операции и операнда Olejik Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 15 07.06.2009 01:46
Какое определение размера лучше? Ozerich HTML и CSS 7 12.02.2009 23:55
Определение IP адреса клиента RoamingFire Работа с сетью в Delphi 2 28.02.2008 14:08
Определение цвета и размера заголовков окон VDLab Win Api 2 28.12.2006 17:24