информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Spanning Tree Protocol: недокументированное применениеСтрашный баг в Windows
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Ядро Linux избавляется от российских... 
 20 лет Ubuntu 
 Tailscale окончательно забанила... 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Как 8086 может 32соваться????????? 12.11.01 12:29  Число просмотров: 936
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> 8086 родился в 1978 году с 16-разрядными регистрами и
> 16-битной шиной.
> Но все дизассемблеры (HIEW,BIEW,...), книги (Зубков, Юров)
> и интернет-источники отчаянно втирают, что команда типа:
>
> 15 id===ADC EAX,imm32===Add with carry imm32 to EAX
> 81 /2 id=== ADC r/m32,imm32=== Add with CF imm32 to r/m32
> ,...
> может оперировать 32-разрядными величинами уже на 8086!!

На 8086 команда
15 id интерпретируется как ===ADC AX,imm16===Add with carry imm16 to AX
На 386+ она может интеретироваться по-разному в зависимости от разрядности сегмента кода.

На 386+, сегмент кода 32-разрядный:
15 id===ADC EAX,imm32===Add with carry imm32 to EAX
66 15 id===ADC AX,imm16===Add with carry imm16 to AX

На 386+, сегмент кода 16-разрядный:
15 id===ADC AX,imm16===Add with carry imm16 to AX
66 15 id===ADC EAX,imm32===Add with carry imm32 to EAX
<programming>
Экспертам ассемблера адресуется... 08.11.01 08:56  
Автор: imho Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Короче: пишу компилятор, формат инструкции -
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-х байт?

Пишут, что эти трехбайтовые инструкции легко спутать с префиксами или постфиксами, так вот я чего боюсь - а ну как я его спутаю с чем либо при двухбайтовоопкодной записи?
на полном серъезе 09.11.01 08:56  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
на риске так можно но на интеле ты обязательно запутаешься

сделай

opcode: array[0..MAX_OPCODE_LENGTH] of Byte;

и конструируй каждую команду индивидуально
НЕ знаток системотехники... 08.11.01 21:17  
Автор: 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-х байт?
>
> Пишут, что эти трехбайтовые инструкции легко спутать с
> префиксами или постфиксами, так вот я чего боюсь - а ну как
> я его спутаю с чем либо при двухбайтовоопкодной записи?
Дай, думаю имя поменяю... 08.11.01 21:46  
Автор: КоЛЯн=imho Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Цитирую!!! 08.11.01 21:42  
Автор: КоЛЯн Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Цитирую Инстракшн сет референс(4547104.pdf):

стр. 33:

"Some of the SSE and SSE2 instructions have three-byte opcodes. For these
three-byte opcodes, the third opcode byte may be F2H, F3H, or 66H. For
example, the SSE2 instruction CVTDQ2PD has the three-byte opcode F3 OF
E6. The third opcode byte of these three-byte opcodes should not be thought
of as a prefix, even though it has the same encoding as the operand size prefix
(66H) or one of the repeat prefixes (F2H and F3H). As described above,
using the operand size and repeat prefixes with SSE and SSE2 instructions is
reserved."

А теперь про префиксы - у меня нулевой байт указывает, сколько байтов используются (и используются ли вообще). Так проще определить, надо ли вставлять ModR/M байт, сколько префиксов надо добавлять и т.д.

Насчет Зубкова - книга на полке, но такого почему-то не встречал... Надо посмотреть.
И потом... 11.11.01 15:27  
Автор: КоЛЯн Статус: Незарегистрированный пользователь
<"чистая" ссылка>
8086,80186,80286 одинаково работают с 16-разрядными регистрами и операндами?
Как 8086 может 32соваться????????? 11.11.01 15:25  
Автор: КоЛЯн Статус: Незарегистрированный пользователь
<"чистая" ссылка>
8086 родился в 1978 году с 16-разрядными регистрами и 16-битной шиной.
Но все дизассемблеры (HIEW,BIEW,...), книги (Зубков, Юров) и интернет-источники отчаянно втирают, что команда типа:

15 id===ADC EAX,imm32===Add with carry imm32 to EAX
81 /2 id=== ADC r/m32,imm32=== Add with CF imm32 to r/m32
,...
может оперировать 32-разрядными величинами уже на 8086!!

Ради справедливости, отмечу, что 32-адресация появилась лишь у 80386!?

Ну вот я и определил низший тип процессора для этих команд как 80386!
Я не прав????

А если я прав, то какого они лапшу вешают?
Как 8086 может 32соваться????????? 12.11.01 12:29  
Автор: :-) <:-)> Статус: Elderman
<"чистая" ссылка>
> 8086 родился в 1978 году с 16-разрядными регистрами и
> 16-битной шиной.
> Но все дизассемблеры (HIEW,BIEW,...), книги (Зубков, Юров)
> и интернет-источники отчаянно втирают, что команда типа:
>
> 15 id===ADC EAX,imm32===Add with carry imm32 to EAX
> 81 /2 id=== ADC r/m32,imm32=== Add with CF imm32 to r/m32
> ,...
> может оперировать 32-разрядными величинами уже на 8086!!

На 8086 команда
15 id интерпретируется как ===ADC AX,imm16===Add with carry imm16 to AX
На 386+ она может интеретироваться по-разному в зависимости от разрядности сегмента кода.

На 386+, сегмент кода 32-разрядный:
15 id===ADC EAX,imm32===Add with carry imm32 to EAX
66 15 id===ADC AX,imm16===Add with carry imm16 to AX

На 386+, сегмент кода 16-разрядный:
15 id===ADC AX,imm16===Add with carry imm16 to AX
66 15 id===ADC EAX,imm32===Add with carry imm32 to EAX
Как 8086 может 32соваться????????? 12.11.01 08:21  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> 8086 родился в 1978 году с 16-разрядными регистрами и
> 16-битной шиной.
> Но все дизассемблеры (HIEW,BIEW,...), книги (Зубков, Юров)
> и интернет-источники отчаянно втирают, что команда типа:
>
> 15 id===ADC EAX,imm32===Add with carry imm32 to EAX
> 81 /2 id=== ADC r/m32,imm32=== Add with CF imm32 to r/m32
> ,...
> может оперировать 32-разрядными величинами уже на 8086!!

нет EAX на 8086 и вообще ни одного открытого регистра 32-битного нет
соответственно оперировать 32-разрядными величинами 8086 может только используя два регистра типа DX:AX
imm32 в опкоде тоже нет НИГДЕ на 8086
максимум 16:16

>
> Ради справедливости, отмечу, что 32-адресация появилась
> лишь у 80386!?

при чем тут адресация? которая на 8086 20-битная с использованием двух 16-битных регистров

>
> Ну вот я и определил низший тип процессора для этих команд
> как 80386!
> Я не прав????

прав

>
> А если я прав, то какого они лапшу вешают?

да ты просто что-то прочитал криво
приведи цитату
Привожу цитату!!!: 12.11.01 13:37  
Автор: КоЛЯн Статус: Незарегистрированный пользователь
<"чистая" ссылка>
>> да ты просто что-то прочитал криво
> приведи цитату

"Зубков С.В. Ассемблер для DOS6WINDOWS и UNIX"
cтр 602 - и далее по мере надобности...

Для команд ADC,ADD,AND в качестве значения операндов фигурирует "r",
что на стр.600 транслируется в "любой регистр общего назначения".
Дядьки с Интел пишут:
"
80 /4 ib AND r/m8,imm8
81 /4 iw AND r/m16,imm16
81 /4 id AND r/m32,imm32
83 /4 ib AND r/m16,imm8
83 /4 ib AND r/m32,imm8
"
что явно указывает на разрядность.

Очевидно г. Зубков С.В. поленился прописывать r8,r16,r32 для каждой строчки, а ограничился одним r , причем для 8088/8087 процессоров указано число микроопераций, что должно бы значить что все справедливо для этого типа процессоров.

В результате - надо самому рыться (а зачастую не в чем) и догадываться, когда интел расширил разрядность шины и с какого цпу что работает.

Далее, посмотрел я по исходникам как люди дизассемблеры пишут - и ужаснулся. в большинстве своем содрали бит в бит с какого-то корейского текстового файла с инструкциями 8-летней давности, когда не было Акробат ридера и Интел рассылал документацию при предоплате. Но потом же выложили все-же на сайте, так неужели лень было прочитать?

Я все же склонен больше верить интел чем узкоглазым друзьям. Хоть есть некоторые ошибки, но все же без повторов - там операнд пропущен, там mmx вместо xmm - не смертельно.

P.S. Зачем я всем этим страдаю... У нас в универе для различных экспериментальных целей (ну, там, управления эксимерным лазером или ЭПР спектрографии) используют до сих пор если не XT, то 286/7 точно - сгорит, так не жалко, "новую" можно взять... крейтов как в айбиэм - ногами разгребаешь... А на 4-тых, те что пни,а не 80*, в нете сурфают и в квакают (от quake..).
Привожу цитату!!!: 13.11.01 09:09  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> Очевидно г. Зубков С.В. поленился прописывать r8,r16,r32
> для каждой строчки, а ограничился одним r , причем для
> 8088/8087 процессоров указано число микроопераций, что
> должно бы значить что все справедливо для этого типа
> процессоров.

ну значит зубков ошибся
в таких книгах ошибок много

> Далее, посмотрел я по исходникам как люди дизассемблеры
> пишут - и ужаснулся. в большинстве своем содрали бит в бит
> с какого-то корейского текстового файла с инструкциями
> 8-летней давности, когда не было Акробат ридера и Интел
> рассылал документацию при предоплате. Но потом же выложили
> все-же на сайте, так неужели лень было прочитать?

я когда делал дизасм то тоже использовал 4 книжки плюс интеловскую распечатку и еще проверял все время

>
> Я все же склонен больше верить интел чем узкоглазым
> друзьям. Хоть есть некоторые ошибки, но все же без повторов
> - там операнд пропущен, там mmx вместо xmm - не смертельно.
>
> P.S. Зачем я всем этим страдаю... У нас в универе для
> различных экспериментальных целей (ну, там, управления
> эксимерным лазером или ЭПР спектрографии) используют до сих
> пор если не XT, то 286/7 точно - сгорит, так не жалко,
> "новую" можно взять... крейтов как в айбиэм - ногами
> разгребаешь... А на 4-тых, те что пни,а не 80*, в нете
> сурфают и в квакают (от quake..).

а чему там гореть-то
многие до сих пор работают
если процессора хватает - отличный выбор (а если у программеров руки кривые то и никакого не хватит)
Вдогонку... 12.11.01 14:04  
Автор: КоЛЯн Статус: Незарегистрированный пользователь
<"чистая" ссылка>
И что там с Pentium Pro?

Читал, что CMOVсс с него начались, но все ли CMOVсс или только некоторые?

И потом,

? < PentiumPro < ?

Я думаю, что 8086<80186<80286<80386<80486<P1<P1MMX<PentiumPro<PentiumII<PentiumIII<PentiumIV<Itanium
(По включению всего предыдущего)

а как с атлонами/дюронами/мп/хр/к6-II/к6/k5/....?
И потом, где бы достать доки по инструкциям мотороллок (я про яблочки...)
Вдогонку... 13.11.01 09:00  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> И что там с Pentium Pro?
>
> Читал, что CMOVсс с него начались, но все ли CMOVсс или
> только некоторые?

какие конкретно тебя интересуют? я проверю (сейчас пишу это на ППро200)

>
> И потом,
>
> ? < PentiumPro < ?
>
> Я думаю, что
> 8086<80186<80286<80386<80486<P1<P1MMX<
> PentiumPro<PentiumII<PentiumIII<PentiumIV<Itani
> um
> (По включению всего предыдущего)

нету ММХ на про (а на П1ММХ нету много чего что на про есть)

>
> а как с атлонами/дюронами/мп/хр/к6-II/к6/k5/....?

атлон могу проверить рядом стоит остальные -хз

> И потом, где бы достать доки по инструкциям мотороллок (я
> про яблочки...)

неужели нет в инете?
Поподробнее, плз! 13.11.01 16:10  
Автор: КоЛЯн Статус: Незарегистрированный пользователь
<"чистая" ссылка>
> > Я думаю, что
> 8086<80186<80286<80386<80486<P1<P1MMX<
> PentiumPro<PentiumII<PentiumIII<PentiumIV<Itanium
> > (По включению всего предыдущего)
> нету ММХ на про (а на П1ММХ нету много чего что на про
> есть)

Вот здесь бы поподробнее... что значит много?
Насеолько я знаю, у про:

CMOVcc,
fcomi
fcomip
FCMOVcc
fucomi
fucomip
rdpmc
ud
ud2

только вот насчет CC-инструкции, я не уверен, все ли они только на про, или некоторые есть уже на пне, например


"а на П1ММХ нету много чего что на про есть"-????
я что то упустил?

> > а как с атлонами/дюронами/мп/хр/к6-II/к6/k5/....?
> атлон могу проверить рядом стоит остальные -хз

Ты мне лучше скажи, что - нить кроме расширенных ммх и
pf2iw
pfnacc
pfpnacc
pi2fw
pswapd
разве есть что-то еще???
(http://www.amd.com/us-en/assets/content_type/white_papers_and_tech_docs/22466.pdf)

> > И потом, где бы достать доки по инструкциям мотороллок
> (я
> > про яблочки...)
> неужели нет в инете?
Не-а!

Я единственное что пробовал - в свое время вбивал на контроллере 8051 нечто типа
LABEL1: MVI HL,00
OUT 33
JMP LABEL1
Поподробнее, плз! 14.11.01 15:24  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> только вот насчет CC-инструкции, я не уверен, все ли они
> только на про, или некоторые есть уже на пне, например

если у тебя есть блоки проверяющие работу конкретных инструкций то давай я у себя прогоню на процах что сейчас под рукой (ip166mmx ipPro200 AMD TB900)
а вообще переходи на е-мейл
Подожди пару-тройку недель! Я чуствую в воздухе запах бета версии... 14.11.01 17:24  
Автор: КоЛЯн Статус: Незарегистрированный пользователь
<"чистая" ссылка>
Подожди пару-тройку недель! Я чуствую в воздухе запах бета версии...
Тогда и пошлю на ящик. Отладкой займусь по ходу бета тестирования !
мыло есть? - могу прислать как сделаю!
Подожди пару-тройку недель! Я чуствую в воздухе запах бета версии... 15.11.01 11:03  
Автор: z0 <z0> Статус: Member
<"чистая" ссылка>
> Подожди пару-тройку недель! Я чуствую в воздухе запах бета
> версии...
> Тогда и пошлю на ящик. Отладкой займусь по ходу бета
> тестирования !
> мыло есть? - могу прислать как сделаю!

z0mailbox@mail.ru
good luck
На полке не только зубы ? ;) 11.11.01 21:37  
Автор: Chingachguk <Chingachguk> Статус: Member
<"чистая" ссылка>
> 8086 родился в 1978 году с 16-разрядными регистрами и
> 16-битной шиной.

Интересно, как он адресует данные с адресом > 64K ? с такой
шиной ;)

> Но все дизассемблеры (HIEW,BIEW,...), книги (Зубков, Юров)
> и интернет-источники отчаянно втирают, что команда типа:
>
> 15 id===ADC EAX,imm32===Add with carry imm32 to EAX
> 81 /2 id=== ADC r/m32,imm32=== Add with CF imm32 to r/m32
> ,...
> может оперировать 32-разрядными величинами уже на 8086!!

Гм. Юрова не стал покупать, а вот у Зубкова такого не видал. Может,
страницу скажешь ?
Забил я вот такие команды (сегмент с use16): (слева - машинный код в отладчике td)

1307 adc ax,[bx]
661307 adc eax,[bx]

Может, в этом корень зла ?
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach