|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 17, 2003 21:49:41 стр. 19. Организация памяти Цитата: Помимо основной памяти программы могут использовать регистры - специальные ячейки памяти, расположенные внутри процессора, доступ к которым осуществляется не по адресам, а по именам Примечание: Интересная новость, процессор у нас теперь стал имена понимать. Регистровая память тоже адресуется в коде, правда по особым правилам: учитывается код регистра, и (не всегда а только если это предпологает опкод) бит w и наличие префикса 66h. Если бы Сергей добавил слова ".. доступ к которым в ассемблерных программах осуществляется .. по именам" то это ещё как то можно было принять. Не знает процессор никаких имён, только коды-числа и логику их расшифровки. Процессор смотрит какой блок предпологает опкод, GPR? хорошо: в 32х битах префикса 66 нет w = 1 и код = 000 - значит из блок регистров общего назначения память000 (мы зовём EAX но процессор слова EAX не знает, а в ассемблерных программах мы вообще эти имена можем переопределить) w = 1 код = 001 значит блок регистров общего назначения 001. и т.д. Выбор блока определяется опкодом. Т.е. есть сегментные, mmx, fpu и т.д. называемые блоки, опкод определяет из какого. Появление специальных имён-мнемоник для ассемблистов в х86 для группы регистров общего назначения и сегментных было предопределено просто тем что регистры не были полностью универсальны, ни при адресации ни при использовании любой из всех команд. При адресации в modrm например можно было использовать только 4е регистра. Им назначили псеводо имена либо начинающиеся на B (BX,BP) - что означало BASE либо кончающиеся на I(SI,DI). В реальности же это были регистры адресуемые непосредственно по кодам 011,101,110,111. Или по групповым формулам сложения в указателе: 000 = %011+%110 001 = %011+%111 ... Где левая часть - код группы, правая %code означает - значение в регистре code. Сложение значений осуществлялось по модулю 2^16. Обратим внимание, что чем дальше, тем реже появлялись специальные "имена" для адресации регистров. Т.е. st0...7, mm0...7,cr0... Просто номер группы - блока и индекс, который при желании можно считать адресом внутри группы если бы револьверный принцип переименования в стеке FPU. Для примера вот использование одного из моих макросов. pushr 00012 это то что в обычной ассемблерной программе человек пишет 5ю строками push eax ;cod=0 push eax ;cod=0 push eax ;cod=0 push ecx ;cod=1 push edx ;cod=2 |
|
|
Дата: Сен 17, 2003 22:20:08 Выбор блока определяется опкодом. Т.е. есть сегментные, mmx, fpu и т.д. называемые блоки, опкод определяет из какого. mmx и fpu есть суть одни и те же регистры |
|
|
Дата: Сен 17, 2003 23:07:58 Да это так. Я пытался провести мысль что формат мнемоники стал, что-ли ближе к машинной логике можно было и так конечно написать st/mm(0) или st(или mm)(0). Но вобщем ничего путного (лучшего) в голову не пришло. Слишком много оговаривать-уточнять пришлось о кодировании ассемблером, связи операция-выбор блока и т.п. |
|
|
Дата: Окт 2, 2003 00:49:48 стр.20 О VM цитата: Пользовательские программы в таких операционных системах часто работают ещё и в режиме VM, из которого им доступно всё тоже что и из реального, кроме команд управления защищённым режимом ?!! Очень непонятная фраза. Им не доступно всё тоже. Им доступно только то, что супервизор разрешит. И физической памяти адресация для них фиктивна. Подробное описание различий займёт страниц 20 описания что и как работает в VM. Но кратко сходство лишь в том как процессор трактует значение в сегментных регистрах когда он в PM но VM=1. Они начинают привлекаться для формирования части линейного адреса по законам адресной арифметики 16и реального режима. При этом полученное 20и битное значение не конечно, а если включено страничное преобразование то произойдёт ещё и замена старших бит до обращения по физическому адресу. стр. 20. Регистры процессора Цитата: Начиная с 80386 процессоры Intel предоставляют 16 основных регистров для пользовательских программ плюс ещё 11 регистров для работы с мультимедийными приложениями (MMX) и числами с плавающей запятой (FPU/NXP) Сразу несколько вопросов. 16 основных регистров это регистры общего назначения? GPR? Тогда почему 16? Их строго говоря 8. Но можно адресовать их части. Если считать по частям, то всё равно не 16 а 24. 11 регистров для работы с мультимедийными приложениями повергло меня в прострацию по нескольким причинам. 1. Работать с MMX можно было только с PMMX а не с 80386. 2. Пусть, допустим, автор имел ввиду что-то другое, просто выразился неправильно - мол имел ввиду регистры FPU которые потом стал использовать MMX - но здесь тоже неувязачка - FPU появилось интегрированным с общим кристалом только с i486DX. А не с 80386. 3. И наконец - почему 11?! Без вспомогательных - 8, со вспомогательными 13. Но сразу же возникает вопрос - если считать вспомогательные FPU то почему тогда не считать eflags - он тоже доступен программисту? |
|
|
Дата: Окт 10, 2003 08:27:09 стр. 20. Расшифровка названия BX Цитата: .. а регистр база при так называемой адресации по базе Комментарий. При адресации по базе указание на <базовость> в BX несущественна. Как и в BP. Она имеет смысл при адресации только по базе и индексу и только в 16и битном режиме. Там при использовании двух регистров нужно чтобы один регистр был базовым (BX или BP) а другой индексным (SI, DI). Когда регистр используется как базовый без индексного, т.е. происходит адресация по базе им может быть любой из 4х возможных в 16и битной адресации. В 32х битной это вообще значения не имеет. Там любой (в том числе и в паре с индексным) может быть базовый и любой кроме ESP индексным. |
|
|
Дата: Окт 10, 2003 20:41:41 The Svin Замечание не совсем принято. Я бы сказал, что название Base для BX носит условное название. Я правда не вкурсе, но очень возможно, что так и было в некоторых ранних моделях (x86?). То есть для удобства восприятия можно было бы назвать регистр BX регистром Базы. Можно так же предположить, что такое название обязано ЯВУ, где BX предназначался для хранения Указателя на Массив. То есть корни есть. Так что это не ERR а WARNING %))) |
|
|
Дата: Окт 11, 2003 00:43:49 стр.75 Команда FCOMI... "эти команды эквивалентны командам FCOM... вслед за которыми исполянются FSMSW AX и SAHF команды "FSMSW" не существует, здесь имелась ввиду команда "FSTSW" |
|
|
Дата: Окт 11, 2003 11:04:22 The Svin Замечание не совсем принято. Я бы сказал, что название Base для BX носит условное название. Я правда не вкурсе, но очень возможно, что так и было в некоторых ранних моделях (x86?). То есть для удобства восприятия можно было бы назвать регистр BX регистром Базы. Я что возражаю что он называется регистром Базы что-ли? Ещё раз у Зубкова написано про адресацию по базе нужно было по базе и индексу Насчёт ранних и поздних - не имеет это никакой разница, разница не в модели а в режиме. "Базовость" BX имеет значение в 16битном режиме адресации эффективного адреса. |
|
|
Дата: Окт 11, 2003 11:06:50 Можно так же предположить, что такое название обязано ЯВУ, где BX предназначался для хранения Указателя на Массив. Ну прямо ЯВУ :) Так уж они заботились о ЯВУ когда (это времена когда издавались книжки типа "PL -язык будущего") выпустили 8086 и придумали название. |
|
|
Дата: Окт 11, 2003 11:34:04 Ещё раз у Зубкова написано про адресацию по базе нужно было по базе и индексу Гм.. ОК. Так уж они заботились о ЯВУ А я про это и сказал :) |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.086 |