При кодировании команд разработчик микропроцессора может назначить любой операции любое число. Например, для операции сложения можно назначить код 1, для операции вычитания код 12 и т. д. Для выполнения одной и той же операции над разными регистрами процессора назначаются разные коды команд. Поэтому для операции суммирования может потребоваться 8 чисел (команд). Например, 1 — просуммировать аккумулятор с регистром R0, 2 — просуммировать аккумулятор с регистром R1, 3 — просуммировать аккумулятор с регистром R2 и т. д.
Запоминать эти коды очень утомительно для человека. При программировании в машинных кодах легко совершить ошибку и очень трудно найти ее, особенно если коды различаются только одним битом. Для сокращения объема записи вместо двоичного кода можно воспользоваться шестнадцатеричным, однако это не увеличивает удобочитаемости программы. Фрагмент шестнадцатеричного представления исполняемого кода программы для микропроцессора приведен на рис. 4.24.
Рис. 4.24.
Ну, как? Очень легко разобраться в такой последовательности чисел?
Я думаю, не слишком. Чтобы уменьшить объем запоминаемой информации и увеличить наглядность исходного текста программы, для каждой операции процессора придумывают мнемоническое обозначение.
В качестве мнемонического обозначения операции обычно используют сокращения английских слов, образующих название этой операцию. Например, для
Полная запись команды содержит мнемоническое обозначение операции и используемые этой операцией операнды, которые перечисляются через запятую. При этом обычно операнд-приемник результата записывается первым, а операнд-источник операнда — вторым. Например:
MOV R0, А ;Скопировать содержимое регистра
ADD A, R5 ;Просуммировать содержимое регистров
Приведенные выше команды — однобайтовые, т. к. в них используются только внутренние регистры процессора. Если в команде используется константа в качестве операнда или указывается адрес операнда в памяти, то код команды будет занимать в памяти два или три байта. Например:
MOV А, 1025 ;Скопировать содержимое ячейки памяти с адресом 1025 в регистр
ADD
Несмотря на то, что общий объем исходного текста программы увеличивается, скорость написания и особенно отладки программ при применении мнемонического обозначения команд возрастает. Кто сомневается, может попробовать разобраться в программе, приведенной на рис. 4.24.
Теперь вместо одного текста программы в памяти компьютера или на бумаге придется хранить два варианта представления: один для человека, в дальнейшем будем называть этот вариант исходным текстом программы; другой для микропроцессора, в дальнейшем будем называть этот вариант загрузочным модулем.
Преобразование программы, записанной в мнемоническом виде, в машинные коды является рутинной работой, которую можно поручить компьютерной программе. Язык программирования, в котором для обозначения машинных команд используются мнемонические обозначения, называется ассемблером. Точно так же называют и программу или пакет программ, которые осуществляет трансляцию (преобразование) исходного текста программы, написанной на языке программирования ассемблер (исходный модуль), в машинные коды (загрузочный модуль).
Теперь, когда мы рассмотрели все составные части микропроцессора: операционный блок, блок микропрограммного управления, — а также систему команд, можно, наконец, приступить к реализации самого микропроцессора. Напомню, что архитектура микропроцессора реализуется микропрограммой и очень мало зависит от аппаратуры, для которой пишется эта микропрограмма. То есть, написав микропрограмму, мы тем самым построим микропроцессор с конкретной архитектурой. Микропрограмма состоит из сотен однотипных блоков, написанных для различных команд микропроцессора, поэтому достаточно рассмотреть реализацию нескольких типовых команд.
Все действия микропроцессора и сигналы на его выводах определяются последовательностью микрокоманд, подаваемых на управляющие входы блока обработки сигналов. Эта последовательность микрокоманд называется микропрограммой.
При изучении принципов работы ОЗУ и ПЗУ приводились временные диаграммы, которые необходимо сформировать для того, чтобы записать или прочитать необходимые данные. Выберем одну из этих временных диаграмм (см. рис. 3.30).