Расмотрим теперь непосредственно память микропроцессора.
Микросхема ROM.
В предыдущей статье мы поговорили об адресных шинах, шинах данных, о каналах RD WR. Эти шины и каналы соединяются с RAM, с ROM либо в наиболее часто встречающихся случаях и с RAM и с ROM. В нашем демонстрационном микропроцессоре (схема в предыдущей статье) есть адресная шина шириной 8 битов и шина данных шириной 8 битов. Это означает, что микропроцессор может адресовать (28) 256 байтов памяти, и может считать или записать 8 битов памяти за один раз.
ROM обозначает постоянную память и имеет постоянные предварительно установленные байты информации. Адресная шина говорит микросхеме ROM, какой байт получить и поместить в шину данных. Когда декодер открывает канал read, микросхема ROM представляет выбранный её байт на шину данных.
Микросхема RAM.
RAM обозначает оперативную память и содержит байты информации, которые микропроцессор может считывать либо записывать в зависимости от поставленных задач. Одна проблема с сегодняшними микросхемами RAM состоит в том, что они забывают все, как только питание уходит. Именно поэтому компьютер и нуждается в ROM.
К сведению…, все компьютеры содержат постоянную память. Возможно создать простой компьютер, который не будет иметь RAM, т.к. много микроконтроллеров помещают свою горстку байтов для RAM непосредственно в микросхему процессора, а вот создать компьютер, который не содержит ROM невозможно. В персональных компьютерах ROM называют BIOS (Базовая система ввода-вывода). Когда микропроцессор запускается, он начинает выполнять инструкции, которые находятся непосредственно в BIOS. Инструкции BIOS запускают тестирование аппаратных средств в машине, после прохождения, которого переходит к жесткому диску для поиска загрузочной записи. Этот загрузочный сектор – скажем маленькая программа (набор инструкций) BIOS помещает в RAM и микропроцессор тогда начинает выполнять инструкции уже этого загрузочного сектора из RAM. Программа загрузочного сектора говорит микропроцессору, что еще необходимо считать с жесткого диска в RAM поочередно, согласно приоритетам. Таким образом микропроцессор загружает установленную операционную систему и переходит уже непосредственно к выполнению её команд.
Инструкции по микропроцессору.
Даже у невероятно простого микропроцессора, показанного в предыдущем примере, будет довольно большой набор инструкций. Этот набор инструкций выполнен как битовые комбинации, у каждой из которых есть различное значение, когда она загружена в регистр инструкций. Как правило люди не особенно хорошо запоминают битовых комбинаций команд, поэтому для процессоров определен ряд коротких слов с определенными значениями, для представления различных битовых комбинаций. Эту набор слов называют ассемблером процессора. Ассемблер может перевести слова на их битовые комбинации очень легко, и затем уже перекодированная информация ассемблера помещается в память микропроцессора для выполнения.
Приведу небольшой (не полный) набор инструкций по ассемблеру, которые программист может использовать для микропроцессора в нашем примере:
- LOADA mem – Загрузка значения регистра А из памяти;
- LOADB mem - Загрузка значения регистра В из памяти;
- CONB con – Загрузка константы в регистр В;
- SAVEB mem - Сохранение значения регистра В в памяти;
- SAVEC mem - Сохранение значения регистра С в памяти;
- ADD – Суммировать А и В и сохранить в С;
- SUB - Вычесть А и В и сохранить в С;
- MUL - Умножить A и B и сохранить результат в C;
- DIV - Разделить A и B и сохранить результат в C;
- COM - Сравнить A и B и сохранить результат в тестовом регистре;
- JUMP addr – Перейти по адресу;
- JEQ addr – Перейти по адресу если равно;
- JNEQ addr - Перейти по адресу если не равно;
- JG addr - Перейти по адресу если больше;
- JGE addr - Перейти по адресу если больше или равно;
- JL addr - Перейти по адресу если меньше;
- JLE addr Перейти по адресу если меньше или равно;
- STOP – Остановить выполнение. И т.д.
Вот такими командами руководствуется микропроцессор в процессе работы, которые содержаться в ROM, регистре команд и декодере инструкций.
При работе процессора и выполнения команд ассемблера число доступных транзисторов имеет огромный эффект на производительность процессора. Как было замечено ранее, типичная инструкция в процессоре 8088 взяла бы 15 тактов, чтобы выполниться. Из-за проекта множителя потребовалось приблизительно 80 циклов только, чтобы сделать одно 16-разрядное умножение на 8088. С большим количеством транзисторов намного множители увеличиваются, и следовательно процессор будет способен к выполнению вычислений за один цикл.
Увеличения числа транзисторов способствовало возникновению технологии конвейерной обработки, так в конвейерной архитектуре, выполнение инструкций перекрывают друг друга. К примеру если процессору бы потребовалось пять тактов, чтобы выполнить каждую инструкцию, то при конвейерной архитектуре может быть пять инструкций на различных этапах выполнения одновременно. И образно это, похоже, что одна инструкция завершает каждый такт.
У многих современных процессоров есть декодеры многоадресной команды и каждый декодер имеет собственный конвейер. Декодеры учитывают потоки многоадресной команды, и это значит, что больше чем одна инструкция может завершиться во время каждого такта. Такой метод работы является довольно сложным процессом, и соответственно для него требуется большое количество транзисторов.
Тенденции
Тенденция в проекте процессора прежде всего была к полным 32-разрядным ALU с быстрым выполнением операций с плавающей точкой встроенным конвейерным выполнением с потоками многоадресной команды. Последние разработки это - 64-разрядные ALU, и как мы знаеи 64 разрядные процессоры уже полностью поглотили рынок. Также была тенденция к специальным инструкциям (как инструкции MMX), которые делают определенные операции особенно эффективно, планируется добавление аппаратной поддержки виртуальной памяти и L1, кэширующегося на микросхеме процессора. Все эти тенденции увеличивают количество транзисторов, приводя их количество к многомиллионным транзисторным станциям, которые доступны уже сегодня. Эти процессоры могут выполнить приблизительно несколько миллиардов инструкций в секунду!