Реклама:

Таненбаум Э.- Архитектура компьютера. стр.200

Регистр РС, напротив, содержит адреса байтов, и его изменение означает увеличение на определенное количество байтов, а не слов. Обращение к памяти регистра РС отличается от обращений других регистров, поэтому в машине Мю-1 и предусмотрен специальный порт памяти для РС. Запомните, что его размер составляет всего один байт. Если увеличить РС на единицу и выполнить чтение, это приведет к вызову следующего байта. Если увеличить БР на единицу и выполнить чтение, это приведет к вызову следующего слова.

Набор МУМ-команд

Набор ЦУМ-команд приведен в табл. 4.2. Каждая команда состоит из кода операции и иногда из операнда (например, смещения адреса или константы). В первом столбце приводится шестнадцатеричный код команды. Во втором столбце дается мнемоника на языке ассемблера. В третьем столбце описывается назначение команды.

Таблица 4.2. Набор IJVM-команд. Размер операндов byte, const и varnum — 1 байт. Размер операндов disp, index и offset — 2 байта

Hex

0x10

Мнемоника

BIPUSH byte

Примечание

Помещает байт в стек

0x59

DUP

Копирует верхнее слова стека и помещает его в стек

0xA7

GOTO offset

Безусловный переход

0x60

IADD

Выталкивает два слова из стека; помещает в стек их сумму

0x7E

IAND

Выталкивает два слова из стека; помещает в стек результат логического умножения (операция И)

0x99

IFEQ offset

Выталкивает слово из стека и совершает переход, если оно равно нулю

0x9B

IFLT offset

Выталкивает слово из стека и совершает переход, если оно меньше нуля

0x9F

IFJCMPEQ offset

Выталкивает два слова из стека; совершает переход, если они равны

0x84

I INC varnum const

Прибавляет константу к локальной переменной

0x15

I LOAD varnum

Помещает локальную переменную в стек

0xB6

INVOKEVIRTUALoVsp

Вызывает процедуру

0x80

IOR

Выталкивает два слова из стека; помещает в стек результат логического сложения (операция ИЛИ)

OxAC

IRETURN

Выдает результат выполнения процедуры (целое число)

0x36

ISTORE varnum

Выталкивает слово из стека и запоминает его во фрейме локальных переменных

0x64

ISUB

Выталкивает два слова из стека; помещает в стек их разность

0x13

LDCJ/V index

Берет константу из набора констант и помещает ее в стек

0x00

NOP

Не производит никаких действий

0x57

POP

Удаляет верхнее слово стека

0x5F

SWAP

Переставляет два верхних слова стека

OxC4

WIDE

Префиксная команда; следующая команда содержит 16-разрядный индекс

Команды нужны для того, чтобы помещать слова из различных источников в стек. Источники — это набор констант (LDCW), фрейм локальных переменных (IL0AD) и сама команда (BIPUSH). Переменную можно также вытолкнуть из стека и сохранить во фрейме локальных переменных (ISTORE). Над двумя верхними словами стека можно совершать две арифметические (IADD и ISUB) и две логические операции (IAND и I0R). При выполнении любой арифметической или логической операции два слова выталкиваются из стека, а результат помещается обратно в стек. Существует 4 команды перехода: одна для безусловного перехода (GOTO), а три другие для условных переходов (IFEQ, IFLT и IFICMPEQ). Все эти ко манды изменяют значение PC на размер их смещения, который следует за кодом операции в команде. Операнд смещения состоит из 16 бит. Он прибавляется к адресу кода операции. Существуют также команды для перестановки двух верхних слов стека (SWAP), дублирования верхнего слова (DUP) и удаления верхнего слова (POP).


⇐ Предыдущая страница| |Следующая страница ⇒