Re[6]: Конец интел?
От: Pavel Dvorkin Россия  
Дата: 12.09.24 01:26
Оценка:
Здравствуйте, netch80, Вы писали:

N>В 8080 не было OF. В 8086 его добавили... в старший байт. При том, что в младшем было место, там и сейчас 3 бита тупо захардкожены в те же 100 что были в 8080. Кажется, мелочь? Уже тогда "стреляет" в виде издевательств, что из 8087 вытаскивается бит... в PF. LAHF/SAHF не работают с OF. В результате, отделить, что в Flags относится к condition, а что — к режиму, становится сильно сложнее. (Потом стреляет ещё и в ранней amd64.)

N>Изначально ненужные команды, но реализация которых — это чемодан набитый кирпичами без ручки. RCL/RCR со сдвигом более чем 1 бит — даже в ассемблере никто никогда не использовал. CMC — кому когда нужна?
N>8087: нафига стек регистров? Просто 4 регистра (никогда не использовалось больше) с прямой адресацией — помогло бы эффективнее и проще и изначально, и потом.
N>Ладно, это минимум. Дальше было хуже, см. ниже.

Ну тут я могу еще кое-что добавить. BCD операции, например. Но тогда они казались нужными, да и, видимо, совместимость с 8080 требовалась.

N>Плоская модель сама по себе — да. А вот всё вокруг неё — нет.

N>Та же виртуальная память:
N>- Почему в page table entry один бит на права на страницу, а не два согласно режимам? Они этим самым с ходу убили rings 1 & 2 даже для тех, кто хотел и мог их осмысленно использовать.

Потому что механизмы от 286 оказались ненужными. Фактически весь механизм защиты и адресации от 286 в 386 аннигилирован. Он остается, как же иначе, но по сути роли не играет, его программируют так, чтобы не мешал. А реально защита идет на страничном механизме.
Вспомни, зачем сделали 4 кольца. 0-е для ядра ОС, 1- для драйверов, так что их падение не приведет к падению ОС. 2- например, для DB engine. Ну и 3. И никто не стал в 286 процессоре это использовать. Равно как никто не стал использовать задачи процессора и переключение LDT. Идея оказалась невостребованной.

N>- Почему для ring 0 форсирован маппинг? Ему это нафиг не надо, у него и так права на доступ ко всему физическому адресному пространству.


Это не понял. Что за форсирование маппинга ?

N>Далее, 32-битный режим:

N>- Почему префиксы 0x66, 0x67 явно декларирован с самого начала как NOP для байтовых доступов? Если бы сделали их reserved, не требовалось бы потом вводить REX для 64-битного.
N>- Они фактически изменили систему команд (декодер точно другой), значит, можно сделать многое иначе. В 1-байтовом наборе дохрена команд, которые редкие и которым не нужно быть такими короткими: как минимум IN[S], OUT[S], CMC, HLT, XLAT, CLI, STI, CLD, STD, ENTER, LEAVE, IRET, LAHF, SAHF, HLT, AAM, AAD... устал перечислять, но там примерно 60 кодов можно было высвободить. Почему это не сделано? Intel был в состоянии это сделать. Кстати, BCD helpers можно было убить уже тогда же из 32-битных (было сделано только для 64).
N>В результате мы сейчас имеем многобайтовые префиксы типа EVEX[2], всё короткое давно занято.
N>- Почему 32-битные версии регистров доступны по умолчанию? По-нормальному доступ к ним надо было явно вынести на флаг в CR0. Последствия кривого решения — проблемы с переключалками типа DESQview, если они не готовы к работе на 386, причём проблемы мистические, трудно идентифицируемые (пока все не оттоптались по этим грабелькам).
N>- Зачем SMSW, SGDT, etc. непривилегированные? Такое впечатление, что кто-то намеренно напакостил. Основы виртуализации были известны ещё 10 лет до того даже в том тупейшем варианте, который у Попек+Гольдберг (что для современной виртуализации как машина Тьюринга с её ленточкой).

N>Противоестественные реализации некоторых команд. Почему для BSF, BSR ставится ZF, против логики, что он должен ставиться по нулю _результата_, а не источника? Почему не сделать запись какого-нибудь -1 если источник — ноль?


N>CPUID надо было ввести ещё в 186 хотя бы в виде реализации как NOP (а потом добавлять реальные действия), если вообще началось развитие и различие версий.


N>Я уж не вспоминаю, что там уже явно были видны проблемы параллеления декодера, и сделать оформление длины команды в явном виде существенно бы облегчило работу. Но будем предполагать, что это бы они не потянули.


N>Я всё о таких вещах. Все они — нежелание подумать дальше полшага вперёд и сделать так, чтобы себе же было удобно не только в текущей версии, но и чуть-чуть позже... Но нет, "в своём гамаке я желаю полноценно трахаться на лыжах" (c). Фантастическое невежество и бескультурье там, где приложив чуть-чуть ума можно было получить значительно более качественный результат.


Все, в общем, верно. Но в основном совместимость. Ну что прикажешь делать с теми же CLI/STI ? В 86 один код, а в 386 другой ? А SGDT вроде как еще от 286 пришла, и там был какой-то резон ее сделать непривилегированной. А может, и не было. Не подумали.

А в целом — типичное "развивающее" решение. Это когда не делают как следует с нуля, а делают с оглядкой на предыдущие решения. Конечно, многое можно было сделать лучше. Но сама архитектура отнюдь не плоха, а это все же мелочи.

С другой стороны, когда Intel попробовала сделать с нуля "как следует" — получился Itanium.
With best regards
Pavel Dvorkin
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.