Boroda_2
.doc
Таблица 5.10. Основные команды процессора UltraSPARC III
Команда |
Описание |
Команды загрузки |
|
LDSB ADDR, DST |
Загрузка байта со знаком (8 бит) |
intbl@tabl_body = LDUB ADDR, DST |
Загрузка байта без знака (8 бит) |
LDSH ADDR, DST |
Загрузка полуслова со знаком (8 бит) |
LDUH ADDR, DST |
Загрузка полуслова без знака (16 бит) |
LDSW ADDR, DST |
Загрузка слова со знаком (32 бита) |
LDUW ADDR, DST |
Загрузка слова без знака (32 бита) |
LDX ADDR, DST |
Загрузка расширенного слова (64 бита) |
Команды сохранения |
|
STB SRC, ADDR |
Сохранение байта (8 бит) |
STH SRC, ADDR |
Сохранение полуслова (16 бит) |
STW SRC, ADDR |
Сохранение слова (32 бита) |
STX SRC, ADDR |
Загружает расширенное слово (64 бита) |
Арифметические команды |
|
ADD R1, S2, DST |
Сложение |
ADDCC |
Сложение и установка кода условия |
ADDC |
Сложение с переносом |
ADDCCC |
Сложение с переносом и установкой кода |
|
условия |
SUB R1, S2, DST |
Вычитание |
SUBCC |
Вычитание с установкой кода условия |
SUBC |
Вычитание с переносом |
SUBCCC |
Вычитание с установкой кода переноса |
MULXR1, S2, DST |
Умножение |
SDIVXR1, S2, DST |
Деление с учетом знака |
UDIVX R1, S2, DST |
Деление без учета знака |
TADCC R1, S2, DST |
Сложение с использованием поля тега |
Команды обычного и циклического сдвига |
|
SLLR1, S2, DST |
Логический сдвиг влево (32 бита) |
SLLXR1, S2, DST |
Логический сдвиг влево (64 бита) |
SRLR1, S2, DST |
Логический сдвиг вправо (32 бита) |
SRLXR1, S2, DST |
Логический сдвиг вправо (64 бита) |
SRAR1, S2, DST |
Арифметический сдвиг вправо (32 бита) |
SRAXR1, S2, DST |
Арифметический сдвиг вправо (64 бита) |
Логические команды |
|
AND R1, S2, DST |
Логическое И |
ANDCC R1, S2, DST |
Логическое И с установкой кода условия |
ANDN R1, S2, DST |
Логическое НЕ-И |
Команда |
Описание |
ANDNCC R1, S2, DST |
Логическое НЕ-И с установкой кода условия |
OR R1, S2, DST |
Логическое ИЛИ |
ORCC R1, S2, DST |
Логическое ИЛИ с установкой кода условия |
ORN R1, S2, DST |
Логическое НЕ-ИЛИ |
ORNCC R1, S2, DST |
Логическое HE-ИЛИ с установкой кода условия |
XOR R1, S2, DST |
Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ |
XORCC R1, S2, DST |
Логическое ИСКЛЮЧАЮЩЕЕ ИЛИ с установкой кода условия |
XNOR R1, S2, DST |
Логическое ИСКЛЮЧАЮЩЕЕ НЕ-ИЛИ |
XNORCC Команды передачи управления |
Логическое ИСКЛЮЧАЮЩЕЕ НЕ-ИЛИ с установкой кода условия |
BPcc ADDR |
Переход с прогнозированием ветвлений |
BPr SRC, ADDR |
Переход в регистр |
CALL ADDR |
Вызов процедуры |
RETURN ADDR |
Выход из процедуры |
JMPL ADDR, DST |
Переход со связыванием |
SAVE R1, S2, DST |
Расширение регистровых окон |
RESTORE R1, S2, DST |
Восстановление регистровых окон |
Тсс CC, TRAP# |
Системное прерывание при определенном условии |
PREFETCH FNC |
Выборка данных из памяти с упреждением |
LDSTUB ADDR, R |
Атомарная операция загрузки/сохранения |
MEMBAR MASK Прочие команды |
Барьер в памяти |
SETHI CON, DST |
Установка битов с 10-го по 13-й |
MOVcc CC, S2, DST |
Перемещение при определенном условии |
MOVr, R1, S2, DST |
Перемещение в зависимости от значения регистра |
NOP |
Пустая операция |
POPC SI, DST |
Подсчет генеральной совокупности |
RDCCR V, DST |
Чтение регистра кода условия |
WRCCR, R1, S2, V |
Запись регистра кода условия |
RDPC V, DST |
Чтение счетчика команд |
Если изначальный порядок следования команд А... В ... С, где А устанавливает коды условий, а В их проверяет, то компилятор не сможет вставить команду С между А и В, если тоже С устанавливает коды условий. По этой причине многие команды имеют два варианта, а компилятор обычно использует ту команду, которая не устанавливает коды условий, если не планируется проверить их позже.
Поддерживаются также команды умножения, деления с учетом знака и деления без учета знака.
Кроме того, поддерживается специальный формат 30-разрядных чисел с автоматическим опознаванием типа данных за счет поля тега. Этот формат используется для таких языков, как Smalltalk и Prolog, в которых тип переменных может меняться во время выполнения программы. При наличии таких чисел компилятор вставляет, например, команду ADD, а во время выполнения программы машина определяет, какая именно команда ADD нужна в данном случае, целочисленная или с плавающей точкой.
Группа команд сдвига включает одну команду сдвига влево и две команды сдвига вправо. Каждая из них имеет два варианта: 32- и 64-разрядный. Команды сдвига в основном используются для манипулирования битами. Большинство CISC-машин имеют довольно много разнообразных команд обычного и циклического сдвига, но практически все они совершенно бесполезны.
Логические команды аналогичны арифметическим. Эта группа включает команды AND (И), OR (ИЛИ), X0R (ИСКЛЮЧАЮЩЕЕ ИЛИ), ANDN (НЕ-И), 0RN (HE-ИЛИ) и XN0R (ИСКЛЮЧАЮЩЕЕ HE-ИЛИ). Полезность последних трех команд сомнительна, но они могут выполняться за один цикл и не требуют практически никакого дополнительного аппаратного обеспечения, а потому часто включаются в набор команд. Даже разработчики RISC-машин порой поддаются искушению.
Следующая группа содержит команды передачи управления. Символами ВРсс обозначена группа команд, которые совершают переходы в зависимости от различных условий, а также указывают компилятору, требуется или нет прогнозирование ветвлений. Команды ВРг проверяют регистры и совершают переход, если условие подтверждается.
Предусмотрено два способа вызова процедур. Для команды CALL используется вариант 4 формата с 30-разрядным смещением (см. рис. 5.11). Этого значения достаточно для того, чтобы добраться до любой команды в пределах 2 Гбайт от вызывающего оператора в любом направлении. Команда CALL копирует адрес возврата в регистр R15, который после вызова превращается в регистр R31.
Второй способ вызова процедуры — использование команды JMPL в варианте 1а или lb формата (см. рис. 5.11). Эта команда позволяет помещать адрес возврата в любой регистр. Такая форма может быть полезной в том случае, если целевой адрес вычисляется в ходе выполнения программы.
Команды SAVE и RESTORE манипулируют регистровым окном и указателем стека. Обе команды совершают прерывание, если следующее (предыдущее) окно недоступно.
В последней группе содержатся команды, не попавшие ни в одну из других групп. Команда SETHI введена из-за невозможности поместить 32-разрядный непосредственный операнд в регистр. Команда SETHI устанавливает биты с 10-го по 31-й, а затем следующая команда передает оставшиеся биты, используя непосредственный формат.
Ряд широко распространенных CISC-команд, не представленных в табл. 5.10, можно легко смоделировать, использовав либо регистр G0, либо операнд-константу (см. вариант lb формата на рис. рис. 5.11). Некоторые из них перечислены в табл. 5.11. Эти команды распознаются ассемблером UltraSPARC III и часто вставляются в код компиляторами. При моделировании многих из них используется тот факт, что регистр G0 связан с аппаратным нулем и запись в этот регистр не дает никакого эффекта.
Таблица 5.11. Некоторые моделируемые команды UltraSPARC III
Команда |
Описание |
MOV SRC, DST |
Выполнение команды OR с операндами SRC и GO и сохранение результата в DST |
CMPSRC1, SRC2 |
Вычитание SRC2 из SRC1 (команда SUBCC) и сохранение результата в G0 |
TST SRC |
Выполнение команды ORCC с операндами SRC и G0 и сохранение результата в G0 |
NOT DST |
Выполнение команды XNOR с операндами DST и G0 |
NEG DST |
Вычитание SRC2 из SRC1 (команда SUBCC) и сохранение результата в G0 |
INC DST |
Прибавление 1 к DST (непосредственный операнд) — команда ADD |
DEC DST |
Вычитание 1 из DST (непосредственный операнд) — команда SUB |
CLR DST |
Выполнение команды OR с операндами G0 и G0 и сохранение результата в DST |
NOP |
Выполнение команды SETHI с операндами G0 и 0 |
RET |
Выполнение команды JMPL % 17 + 8, %G0 |
Команды 8051
Набор команд 8051 очень прост. Все они представлены в табл. 5.12. В каждой строке таблицы указан мнемонический код, краткое описание и режимы адресации для источников или приемников (входных или выходных регистров), обозначенных, соответственно, как SCR или EXT. Вполне объяснимо разнообразие команд MOV для перемещения данных между сумматором (АСС), регистрами и памятью. Также предусмотрены команды помещения элементов в стек и их выталкивания из стека. Указатель стека устанавливается в специальном регистре. Память в диапазоне выше адреса 256 всегда является внешней, так как объем встроенной памяти 8051 равен 128 байт, а 8052 — 256 байт. Обращение к внешней памяти осуществляется только через 16-разрядный регистр DPTR. Группу команд перемещения дополняют разнообразные команды перестановки элементов регистров.
В микросхеме 8051 реализованы простые арифметические команды сложения, вычитания, умножения и деления, причем две последние работают со строго определенными регистрами. Допустимы и широко применяются команды положительного и отрицательного приращения. Кроме того, предусмотрены команды логических вычислений и циклического сдвига.
Далее в табл. 5.12 указаны побитовые операции. Например:
Ком. |
Описание |
АСС |
Per. |
Неп. |
@R |
# С Бит |
MOV |
Перемещение из SCR в ACC |
|
Да |
Да |
Да |
Да |
MOV |
Перемещение из SCR в регистр |
Да |
|
Да |
|
Да |
MOV |
Перемещение из SCR в память |
Да |
Да |
Да |
Да |
Да |
MOV |
Перемещение из SCR в ОЗУ через регистр |
Да |
|
Да |
|
Да |
MOV |
Перемещение 16-разрядной константы в DPTR |
|
|
|
|
|
MOVC |
Перемещение кода в АСС со смещением от DPTR |
|
|
|
|
|
MOVC |
Перемещение кода в АСС со смещением от PC |
|
|
|
|
|
MOVX |
Перемещение байта из внешнего ОЗУ в АСС |
|
|
|
Да |
|
MOVX |
Перемещение байта из внешнего ОЗУ в АСС @DPTR |
|
|
|
|
|
MOVX |
Перемещение байта из АСС во внешнее ОЗУ |
|
|
|
Да |
|
MOVX |
Перемещение байта и АСС @DPTR во внешнее ОЗУ |
|
|
|
|
|
PUSH |
Помещение SCR байта в стек |
|
|
Да |
|
|
POP |
Выталкивание байта из стека в EXT |
|
|
Да |
|
|
XCH |
Обмен данными между АСС и EXT |
Да |
|
Да |
Да |
|
XCHD |
Обмен цифрой младшего разряда между АСС и EXT |
|
|
Да |
|
|
SWAP |
Перестановка полубайтов EXT |
Да |
|
|
|
|
ADD |
Прибавление SCR к АСС |
|
Да |
Да |
Да |
Да |
ADDC |
Прибавление SCR к АСС с переносом |
|
Да |
Да |
Да |
Да |
SUBB |
Вычитание SCR из АСС с займом |
|
Да |
Да |
Да |
Да |
INC |
Положительное приращение EXT |
Да |
Да |
Да |
Да |
|
DEC |
Отрицательное приращение EXT |
Да |
Да |
Да |
Да |
|
INC |
DPTR |
|
|
|
|
|
MUL |
Умножение |
|
|
|
|
|
DIV |
Деление |
|
|
|
|
|
DA |
Десятичная коррекция EXT |
Да |
|
|
|
|
ANL |
SCR И АСС |
|
Да |
Да |
Да |
Да |
ANL |
АСС И EXT |
|
|
Да |
|
|
ANL |
Непосредственный операнд И EXT |
|
|
Да |
|
|
ORL |
SCR ИЛИ АСС |
|
Да |
Да |
Да |
Да |
ORL |
АСС ИЛИ EXT |
|
|
Да |
|
|
ORL |
Непосредственный операнд ИЛИ EXT |
|
|
Да |
|
|
XRL |
SCR ИСКЛЮЧАЮЩЕЕ ИЛИ АСС |
|
Да |
Да |
Да |
Да |
XRL |
АСС ИСКЛЮЧАЮЩЕЕ ИЛИ EXT |
|
|
Да |
|
|
XRL |
Непосредственный операнд ИСКЛЮЧАЮЩЕЕ ИЛИ EXT |
|
|
Да |
|
|
CLR |
Сброс EXT |
Да |
|
|
|
|