Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
НЕ знаток системотехники... 08.11.01 21:17 Число просмотров: 970
Автор: Chingachguk <Chingachguk> Статус: Member
|
Поглядел я в книжку Зубков С.В. "Ассемблер для DOS,Windows
и UNIX." Там вроде сказано, что Opcode может быть 1-2 байта, но
часть Opcod-а может быть в битах 3-5 как раз в ModRM.
Нарыл вот какие команды:
inc al / FE C0 - содержит часть Opcode в ModRM, а вот inc ax / 40 - нет;
lmsw ax / 0F 01 E0 - то же самое, Opcode 2 байта + биты 3-5 ModRM.
То же самое написано у Финогенова.
Может, это то самое ?
Скажи, а зачем у тебя пятиэлементный массив Prefix под четрые максимум
префикса команд ? ;)
> Короче: пишу компилятор, формат инструкции - > instruction = record > Prefix: array[0..4] of Byte; {Префиксы} > Opcode: array[0..2] of Byte; {КОП - код > операции} > ModRM: array[0..1] of Byte; {Байт > ModR/M} > SIB: array[0..1] of Byte; {Байт SIB} > Displacement: array[0..4] of Byte; {Смещение в > комманде} > Immediate: array[0..4] of Byte; > {Непосредственный операнд} > end; > > - Паскальным синтаксисом. > > Везде поле OPCODE указывается как двухбайтовое, однако > intel признается, что среди SSE есть и опкоды из 3-х байт, > но этот третий байт каким-то образом закодирован в ModR/M. > Я просмотрел весь Instruction Set Reference, но так и не > нашел как это делается. > > Скажите, люди добрые, может вы знаете, каким образом > кодируется ентот третий байт, а то может мне лучше > расширить поле OPCODE до 3-х байт? > > Пишут, что эти трехбайтовые инструкции легко спутать с > префиксами или постфиксами, так вот я чего боюсь - а ну как > я его спутаю с чем либо при двухбайтовоопкодной записи?
|
|
|