нет ли у кого эл.книги: "Лю Ю-Чжен, Гибсон Г. Микропроцессоры семейства 8086/8088. Архитектура, программирование и проектирование микрокомпьютерных систем" или другой тех.документации, в которой бы описывалось низкоуровневое функционирование 8086? по x86 книг-то много, но все они ограничиваются общим описанием работы МП, мне же нужна более детальная информация: например, 1) сколько тактов длится та или иная команда; 2) если очередь предвыборки пуста, то первый байт команды считывается в нее и уже потом поступает в блок дешифрации или минует ее; 3) многобайтовые команды считываются сразу (т.е. байт за байтом) или нет? и когда в таком случае шинный интерфейс может начать заполнять очередь. .. и многое-многое другое
um Можно порыться в мануалах, но, к счастью, есть человек, который это уже сделал за нас - некто Агнер Фог (Agner Fog) Его бессмертный труд хранится здесь http://www.agner.org/optimize/ ИМХО - лучший мануал по микроархитектуре и оптимизации, хотя рассматривает только CPU. Молиться на него стоит с оглядкой, ибо и у него бывают ошибки. З.Ы. от себя добавлю - если ты раньше в этой теме не ковырялся - приготовься - будет страшно!
уже дрожу ... но делать-то надо!! :-D кстати, ошибки бывают и в оргиналах: см. Intel Architecture Software Developer’s Manual Volume 2: Instruction Set Reference (1997) Table A-1. One-Byte Opcode Map1 : инструкция 83h, в аргументах Eb,Ib, что означает: ModRM byte, Immediate byte. а на деле ModRM указывает на слово (или WORD-регистр), а Immediate дествительно байтовый, но расширяется до слова за счет знакового бита. причем на странице 3-17 это замечательно описано!! P.S. за линк спасибо. жаль только, что мистер Фог рассматривает МП, начиная с Pentium и выше.
asmfan Конечно, в старых... в новых еще не нашли. Хотя с его трактовкой SHUFPS на Core 2 я таки не согласен. В свое время был большой флуд на ixbt по этому поводу, но к определенному мнению так и не пришли. Я не успеваю его читать, он обновляет быстрее вот уже от 14-го января лежит. Хоть бы диф-лист делал, что ли um Дык, предыдущие не суперскалярные, там все просто. Я даже просматривал таблички в какой-то книге, у Зубкова, что ли... что-то вроде такого:
да, это от Зубкова. кстати, вопрос откуда он взял эти данные? в книге нет ссылок на использованные источники. и там 8086 нет - потому я больше сколняюсь к версии http://library.n0i.net/hardware/i8086opcodes "Дык, предыдущие не суперскалярные, там все просто" ... ну раз просто, тогда хочется услышать ответ на вопросы: - если выполняется команда (многобайтовая), которая обрщается к памяти, и очередь предвыборки имеет свободные ячейки, то какова последовательность работы шинного интерфейса? - вся ли команда перед выполнением вытягивается из предвыборки или потом может быть дочитана? - тратится ли какое-то время на дешифрацию команды? - и если да, то как его рассчитать - ведь даны только такты на исполнение? другими словами, очень интересен граф взаимодействия шинного интерфейса и исполняющего модуля.
um Не совсем понял вопрос, но попытаюсь ответить Во-первых, предвыборка как таковая появилась только в 486. Она относится только к командам, насколько я знаю. Во-вторых шинный интерфейс в этих старичках последовательный в плане выполнения, т. е. его время работы входит во время выполнения команды (вспомним - это не суперскалярные процессоры!) Нечего там дешифровать, разбиение на микрооперации появилось в P6 (Pentium Pro). а больше ничего и не надо просто суммируем их. да это и шинным интерфейсом как-то язык не поворачивается назвать шина данных, шина адреса и пара стробов - и весь интерфейс. Все современные интерфейсы и двухуровневые кеши обусловлены одним великим ЗЛОМ - латентность обращения к памяти в современных x86 системах - порядка полутора сотен тактов, и все навороты нужны, чтобы процессор не тормозил каждый раз при обращении к памяти. В 8086 это не так, обращение к памяти здесь - несколько тактов.
Как это? У 8086 6-ти байтная очередь, которая каким-то образом заполняется в свободное время. Так вот, если команда многобайтовая, она вытаскивается оттуда сразу или за какое-то время? и может ли в это время ШИ туда закачивать новые опкоды?
Ustus Предвыборка появилась раньше, но непомню точно где. На старых процессорах шла выбока команды ее выполнение потом выборка следующей команды. Что бы снизить издержку сделали предвыборку команды. Так как шина адресса простаивает при выполнение инструкции возможна загрузка инструкций. Собственно если не ошибаюс то 8080/8085 не имели буфера предвыбоки, а вот в 8086 он уже появился. um Собственно зачем спорить обратимся к документации. В даташите на 8086 написанно что буфер для инструкций иммет размер 6 байт. Из этогоже источника. Минуя буфер команд сразу поподает в испольнительный блок. http://toptehnika.ru/content/view/471/33/ Шина данных 2байта. Как только в буфере остается 2байта пробует заполнить буфер. Подробнее читай в даташете. Насколько помню тратиться. Дело в том что прежде чем выполнить команду надо дешифровать ее получить адресс данных и сами данные и если требуются данные из памяти то сделать выборку. Напомню что адресс может складываться из трех значений. (BX) + (SI) + DISP Так что требует как минимум два цикла на сложение в реалии 11/12. А после надо еще загрузить данные. Но буффер предвыборки действует кокраз при декодировании и выполнение команды.
книгу Чжена и Гибсона можно найти на казусе. http://kazus.ru/forum/topic_10192-20.html благодарим LEASа