|
|
| Посл.отвђт | Сообщен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 просьба отписать мне письмо :) Для получения некоторого материальчика %) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.074 |