· Начало · Статистика · WASM.RU · Noir.Ru ·

 WASM Phorum (Оффлайн - 24.11.2003) —› WASM.ASSEMBLER —› OpCodes for REAL & PROTECTED mode

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Окт 10, 2003 19:33:23

ОК.
Я постараюсь разобраться и сообщить о результатах. Не могу сказать когда, может что получится до конца недели.


Дата: Окт 10, 2003 22:28:16

Да, забыл.
Когда команды будешь переносить на границу сегмента, я тебе сдуру сказал "ручками" напиши код, а следует примерно так

jmp resume
label:
; test code
resume:
mov MyVar, $-label

и захерачить их скопом (сделав ds и es псевдонимами для cs), отступив назад от границы сегмента на MyVar - возни будет меньше. Аналогично тестовые команды, которые будут сразу за пределами сегмента.


Дата: Окт 11, 2003 09:47:37

Огромный СЕНКС, многое прояснилось, но вот что еще затуманено: если в РЕАЛЕ и VM разрядность всегда 16х, то как расценивает проц работающий в одном из этих 2-х режимов появление 66h?
?
Что операнд 32х разрядный конечно.
По полочкам:
Есть разрядность адреса
И есть разрядность операнда
Полная разрядность операнда по умолчанию = разрядности адреса по умолчанию (её тоже можно менять префиксом 67 для текущей команды, но разрядность операнда отталкивается не от разрядности адреса текущей команды а разрядности адреса по умолчанию). А при префиксе 66h = альтернативной разрядности полного операнда.
Разрядность частичного операнда, как я уже говорил, при обоих режимах разрядности одинакова - 8 бит. Тут кодируется одинаково при обоих режимах адресации.


Дата: Окт 11, 2003 10:56:00

lazari
Вот одна из последних моих учебных программок, идущих
с тюторами по строению опкода.
Пощёлкай кнопочки (в частности префиксы 66,67), понаблюдай
за логикой изменения опкода и мнемоник.
Может кое-что станет понятней.
Таких программок несколько. Все их посылал Edmond.
Если что - проси у него остальные.

1749336990__Modrm1op.zip


Дата: Окт 11, 2003 14:22:36

Да, это ОЧЕНЬ хорошая обучалка. Все наглядно и четко. С этим я думаю что разберусь.
Но ты знаешь, мне не дает покоя одна мысль:
в РЕАЛЕ проц работает как "очень быстрый" Intel8086, не так ли? А ведь тот самый 8086 был 16х процем, верно? Уточним - с линией адреса в 20х - СЕГМ:СМЕЩ ...
Так как же он мог работать с 32х операндами и адресами??? Вот что я не могу понять. Т.е. неужели эти префиксы 66h & 67h были и на Intel8086? Или они были введены в 386-м проце, например, т.к. 286-й еще был 16х процем, или я сильно ошибаюсь? Иначе говоря в реале проц работает не совсем как Intel8086, а как очень похожий на него брат-близнец???


Дата: Окт 11, 2003 16:50:38

в РЕАЛЕ проц работает как "очень быстрый" Intel8086, не так ли?
:)
Это наверно из какой-то крутой книжки фраза :))))

До 80386 конечно префиксов 66, 67 небыло.
Поскольку небыло ни регистров 32х битных, ни эффективных 32х битных адресов.

По поводу как работают процы с 386го в реальном режиме, и что в книжках невнятно написано по поводу этого, - ну при всём желании помочь - слишком много писать.
Просто нужно типа книжки заново написать или хотя бы статьи.
Для начала скажем - нет, ни один в один.
Производятся ряд действий при которых результат в адресации и работе ПОЧТИ эдентичный что и у старых процов.


Дата: Окт 11, 2003 17:02:42

Да вот, одна деталька, которая может пройти незамеченной,
- биты w и d тоже можно менять. Хотя они не кнопками представлены. Для этого нужно кликать по буковкам w и d - битики будут реверсироваться и размер\порядок операндов меняться.
У других обучалок, которые я послал Edmond'у есть самое главное, что в этой отсутвует - тестовая часть, где можно себя проверить на способность кодировать - декодировать мнемоники и машинный код.


Дата: Окт 11, 2003 20:49:31

lazari

Если тебя интересует быстро все и сразу, посмотри еще description в описании интела - Intel Software Developer Manual (он у Интела для ia-32 кажется паскалевский).
Тебе нужны описания всех control transfer - jmp, call, ret, jcc. Внимательно почитай, как там маскируется часть адреса для OpSize=16 (target_address зависит от opsize: call ax/call eax). Сам IP во всех режимах - всегда EIP, 32-разрядный проц таким остается всегда. Как "очень быстрый 8086" ни один проц не работает!

А еще лучше - разбери задачу, о которой мы говорили: как отреагирует проц в риале на превышение 64 кило сегмента. Отдельно для call или jump (opsize=32), отдельно для addr size (напр., mov [eax],edx). В PM всегда будет GP (SS), а вот в риале фиг его знает - может, просто обрежет.


Дата: Окт 12, 2003 09:50:01

Даааааааа. Вот теперь все вроде стало на свои места ... :-)
The Svin

Хорошо что подметил про биты W & D, сам бы я наврядли заметил. А фразу "в РЕАЛЕ проц работает как "очень быстрый" Intel8086, не так ли?" я, вообщето сам придумал - во мне иногда проявляются черты писателя :-)

Valery
А что ты имел в иду фразой "он у Интела для ia-32 кажется паскалевский"? Последнее слово я не вкурил. А на счет той задачи - я седня берусь ИС обрабатывать, может до вечера что и получится ...


Дата: Окт 12, 2003 14:16:24

Паскалевский - в смысле псевдокод в описании. Кажется паскалевский, я давно для ia-32 мануалы не читал.


Дата: Окт 16, 2003 15:59:12

Valery
Господину Valery просьба отписать мне письмо :)
Для получения некоторого материальчика %)

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074