Меню:
|
Система команд
Помимо выполнения самих операций и организации
последовательности их выполнения, необходимо научится записывать операции на
каком-то языке, который был бы понятен процессору. Таким языком является
система команд процессора. Каждая команда должна определять, какое очередное
действие должен выполнить процессор, какую именно операцию и над какими данными
следует выполнить, или же, как необходимо изменить последовательность
выполнения операций.
Кодировать команды процессора можно различными способами, в
зависимости от разрядности процессора, а также от наличия и свойств некоторых
внутренних объектов процессора. Формат команды обычно соответствует разрядности
процессора – если процессор, к примеру, 8-разрядный, то и основные команды тоже
должны быть восьмиразрядными. Если процессор 32-разрядный, то и команда должна
быть 32-разрядной. Чтобы сформулировать некоторые команды, разрядности
процессора может не хватить, и тогда команда может состоять из двух слов. Для
8-разрядных процессоров эта ситуация типична, в 32-разрядных – встречается
реже.
Трехадресные команды
Если необходимо вычислить, к примеру, сумму двух регистров,
то можно сформулировать команду в виде 32 разрядного слова, разбитого на 4
группы разрядов:
Код команды сложения
|
Адрес регистра, содержащего
первое слагаемое
|
Адрес регистра, содержащего
второе слагаемое
|
Адрес регистра для
размещения результата
|
Это означает, что процессор должен выбрать из регистрового
файла первое слагаемое и записать его в один из входных регистров АЛУ. Затем
выбрать из регистрового файла второе слагаемое, и поместить его в другой
входной регистр. Затем нужно данные с выхода АЛУ записать в регистровый файл.
Все три адреса, необходимых для обращения к регистровому файлу, будут
содержаться в самой команде. Такой формат команды называется трехадресным, и
наиболее удобен для понимания. 32-разрядного слова вполне достаточно, для этого
формата. Если разбить 32 разряда на 4 равные группы, в каждой группе будет по 8
разрядов. При помощи 8 разрядов можно закодировать 256 различных значений,
значит, регистров у такого процессора может быть 256, и самих команд тоже может
быть 256. Однако если попробовать 8-разрядную команду сделать трехадресной,
получится плохо – в группе будет по 2 разряда, значит регистров может быть 4, и
команд тоже может быть только четыре. Или, если сделать группы неодинаковыми,
то можно закодировать 16 команд, но регистров тогда можно будет указывать
только два. Поэтому такой формат предпочтительнее для процессоров с
разрядностью 32 и более.
Двухадресные команды
Если нужно уложиться в более короткое слово, например 16
разрядов, можно договориться, что результат операции будет записан по адресу,
содержащему второе слагаемое. Тогда команда будет выглядеть так:
Код команды сложения
|
Адрес регистра, содержащего
первое слагаемое
|
Адрес регистра, содержащего
второе слагаемое и результат.
|
В этом случае, процессор должен также последовательно
выбрать оба аргумента из регистрового файла, а результат поместить по тому же
адресу, где находилось второе слагаемое. Такой формат тоже достаточно удобен,
но имеет тот недостаток, что после выполнения операции один из аргументов будет
потерян. Хотя во многих случаях это не очень важно. Такой формат команды
называется двухадресным. При двухадресном формате команды и разрядности 16
можно закодировать 64 команды (код операции длинной 6 разрядов), которые можно
выполнять над 32 регистрами (2 поля по 5 разрядов).
Одноадресные команды
В случае, когда с разрядностью совсем плохо, полезно иметь в
процессоре регистр со специальными свойствами – аккумулятор. По конструкции,
аккумулятор представляет собой самый обычный регистр. От других регистров он
отличается не конструкцией, а своим особым предназначением. Особое
предназначение аккумулятора определяется соглашением, согласно которому в
качестве одного из аргументов команды всегда используется аккумулятор, и в нем
же всегда сохраняется результат выполнения команды. Тогда в самой команде нам
потребуется указать только один адрес:
Код команды сложения
|
Адрес регистра
|
Правда, в этом случае могут понадобиться дополнительные
команды для помещения другого аргумента в аккумулятор, и для сохранения
результата из аккумулятора в каком-либо из регистров. Такой формат команды
наименее удобен для восприятия и программирования, но зато позволяет при
небольшом объеме регистрового файла уместить многие команды в короткое слово из
восьми разрядов и больше всего подходит для восьмиразрядных процессоров. При
разрядности 8, такой формат позволяет указывать 16 регистров (4 разряда на
адрес регистра) и кодировать 16 различных команд (4 разряда на код операции).
Автор текста - Молчанов Н.Н. |
Дополнительно:
|