Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

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


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

Рис. 4.14. Команда ILOAD с однобайтным индексом (а); команда WIDE ILOAD с двухбайтным индексом (б)

Однако здесь регистр MBR используется не совсем так, как в команде BIPUSH, где байт расширен по знаку. В случае с индексом смещение всегда положительно, поэтому байт смещения должен быть целым числом без знака (в отличие от BIPUSH, где байт представляет собой 8-разрядное целое число со знаком). Интерфейс между регистром MBR и шиной В разработан таким образом, чтобы были возможны обе операции. В случае с командой BIPUSH (где байт — 8-разрядное целое число со знаком) самый левый бит значения MBR копируется в 24 старших бита шины В. В случае с командой ILOAD (где байт — 8-разрядное целое число без знака) 24 старших бита шины В заполняются нулями. Два специальных сигнала помогают определить, какую из этих двух операций нужно выполнить (см. рис. 4.5). В микропрограмме слово MBR указывает на байт со знаком (как в команде bipush3), a MBRU — на байт без знака (как в команде iload2).

Пока ожидается поступление операнда из памяти (во время iload3), значение регистра SP увеличивается на 1 для записи новой вершины стека. Это значение также копируется в регистр MAR (это требуется для записи операнда в стек). Затем значение PC снова увеличивается на 1, чтобы вызвать следующий код операции (микрокоманда iload4). Наконец, значение MDR копируется в регистр TOS, чтобы показать новое верхнее слово стека (микрокоманда iload5).

Команда IST0RE противоположна команде ILOAD (из стека выталкивается верхнее слово и сохраняется в ячейке памяти, адрес которой равен сумме значения регистра LV и индекса данной команды). В данном случае используется такой же формат, как и в команде ILOAD (см. рис. 4.14, а), только здесь код операции равен не 0x15, а 0x36. Поскольку верхнее слово стека уже известно (оно находится в регистре TOS), его можно сразу сохранить в памяти. Однако новое верхнее слово стека все же необходимо вызвать из памяти, поэтому требуются и чтение, и запись, хотя эти операции можно выполнять в любом порядке (или даже одновременно, если бы это было возможно).

Команды ILOAD и IST0RE имеют доступ только к первым 256 локальным переменным. Хотя для большинства программ этого пространства достаточно, все же нужно иметь возможность обращаться к любой локальной переменной, в какой бы части фрейма она ни находилась. Чтобы обеспечить такую возможность, IJVM использует то же средство, что и JVM, — специальный код операции WIDE (так называемый префиксный байт), за которым следует код операции IL0AD или IST0RE. Когда встречается такая последовательность, формат команды ILOAD или IST0RE меняется; в соответствии с новым форматом за кодом операции следует не 8-разрядный, а 16-разрядный индекс, как показано на рис. 4.14, б.

Команда WIDE декодируется обычным способом. Сначала происходит переход к микрокоманде widel, которая обрабатывает код операции команды WIDE. Хотя код операции, который нужно расширить, уже присутствует в регистре MBR, микрокоманда widel вызывает первый байт после кода операции, поскольку этого требует логика микропрограммы. Затем совершается еще один межуровневый переход, но на этот раз для перехода используется байт, следующий за WIDE. Однако, поскольку команда WIDE ILOAD требует иного, чем ILOAD, набора микрокоманд, команда WIDE IST0RE — иного, чем IST0RE, и т. д., при межуровневом переходе код операции нельзя использовать в качестве целевого адреса.


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

.