Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вычислительные системы-введение.doc
Скачиваний:
6
Добавлен:
14.09.2019
Размер:
453.63 Кб
Скачать

Машинный язык

Теперь давайте посмотрим, как можно закодировать команды в типичной вы­числительной машине. Машина, которая используется в нашем примере, схематично показана на рис. 2.4. Она состоит из 16 ре­гистров общего назначения и 256 ячеек основной памяти, каждая из которых име­ет длину восемь битов. Для целей адресации присвоим регистрам номера от 0 до 15, а адреса ячеек основной памяти установим равными от 0 до 255, исключая те случаи, когда мы будем работать с этими числами, представленными в двоич­ной системе. В последнем случае битовые комбинации будем представлять в шестнадцатеричной системе счисления, поэтому регистры общего назначения будут иметь номера от 0 до F, а ячейки памяти — адреса от 00 до FF.

Коды операций

Если мы обратимся к машинному языку, описанному в приложении, то заме­тим, что любая команда кодируется в 16 битах, представляемых в листингах че­тырьмя шестнадцатеричными цифрами (рис. 2.5). Код операции для каждой коман­ды размещается в первых ее четырех битах и представляется одной шестнадцатеричной цифрой. Весь перечень команд включает только двенадцать базовых команд, коды операций которых представляются шестнадцатеричными цифрами от 1 до С. Таким образом, любой код команды, который начинается с шестнадцатеричной цифры 3 (битовая комбинация 0011), относится к команде сохранения STORE, а ка­ждая команда, код которой начинается с шестнадцатеричного символа А, является командой циклического сдвига ROTATE.

Рис. 2.4

Рис. 2.5

В машине есть две команды сложения ADD: одна — для сложения чисел в двоичном дополнительном коде, а другая — для сложения чисел в формате с плавающей точкой. Такое разделение обусловлено тем, что сложение чисел в двоичном дополнительном коде потребует от арифметико-логического блока вы­полнения совершенно иных действий, чем в случае сложения чисел в формате с плавающей точкой.

Операнды

А теперь рассмотрим формат поля операндов. Это поле состоит из трех шестнадцатеричных цифр (12 бит) и во всех случаях (кроме команды остановки HALT, для которой не требуется никаких уточнений) содержит дополнительные сведения о команде, заданной кодом операции. Например, если первая шестнадцатеричная цифра команды равна 1 (код операции считывания ячейки памяти LOAD), то сле­дующая шестнадцатеричная цифра команды указывает общий регистр, в который требуется загрузить считанное из основной памяти значение, а последние две шестнадцатеричные цифры задают адрес ячейки памяти, из которой требуется счи­тать данные. Например, команда 1347 (шестнадцатеричное число) воспринимается машиной как "Загрузить в регистр 3 содержимое ячейки памяти с адресом 47". Если код операции представлен шестнадцатеричной цифрой 7 (операция OR над содержимым двух регистров общего назначения), то следующая шестнадцатерич­ная цифра указывает номер регистра, в который следует поместить результат опе­рации, а две последние шестнадцатеричные цифры поля операндов задают номера тех регистров, над содержимым которых необходимо выполнить операцию OR. В результате команда 70С5 понимается как инструкция "Выполнить операцию OR с содержимым регистров С и 5, а результат поместить в регистр 0".

В нашей машине небольшое отличие существует и между двумя командами за­грузки LOAD. Возможно, вы уже заметили, что код операции 1 (шестнадцатеричный) относится к команде загрузки регистра общего назначения содержимым ячейки основной памяти, тогда как код операции 2 (шестнадцатеричный) — к команде загрузки регистра общего назначения указан­ным числовым значением. Различие заключается в том, что поле операндов в ко­манде первого типа содержит адрес, тогда как в команде второго типа поле опе­рандов содержит ту битовую комбинацию, которую требуется загрузить в регистр.

Интересное решение принято в отношении команды перехода JUMP (код опера­ции — шестнадцатеричная цифра В). Первая шестнадцатеричная цифра поля опе­рандов указывает, какой регистр общего назначения следует сравнить с регистром 0. Если указанный регистр содержит ту же битовую комбинацию, что и регистр 0, то машина выполняет переход посредством выбора следующей команды по тому адресу, который указан в двух последних шестнадцатеричных цифрах поля операндов. В противном случае программа продолжает нормальную последовательность выполне­ния команд. По сути, это пример команды условного перехода. Однако если первая шестнадцатеричная цифра поля операндов будет равна 0, то данная команда запра­шивает сравнить регистр 0 с регистром 0. Так как содержимое любого регистра всегда равно самому себе, то в этом случае переход всегда выполняется. Следовательно, команда, код которой начинается с шестнадцатеричных цифр В0, воспринимается как команда безусловного перехода.