Статус
нашего
сайта:
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

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


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

Вместо этого микрокоманда widel подвергает логическому сложению адрес 0x100 и код операции, поместив его в регистр MPC. В результате интерпретация WIDE LOAD начинается с адреса 0x115 (а не 0x15), интерпретация WIDE IST0RE — с адреса 0x136 (а не 0x36) и т. д. Таким образом, каждый код операции WIDE начинается с адреса, который в управляющей памяти на 256 (то есть 0x100) слов выше, чем соответствующий код обычной операции. Начальная последовательность микрокоманд для IL0AD и WIDE IL0AD показана на рис. 4.15.

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

Рис. 4.15. Начало последовательности микрокоманд для команд ILOAD и WIDE ILOAD. Адреса приводятся в качестве примера

Команда WIDE ILOAD отличается от обычной команды IL0AD только тем, что индекс в ней состоит из двух индексных байтов. Слияние и последующее суммирование этих байтов должно происходить поэтапно, при этом сначала первый индексный байт сдвигается влево на 8 бит и копируется в Н. Поскольку индекс — целое число без знака, здесь используется регистр MBRU (24 старших бита заполняются нулями). Затем прибавляется второй байт индекса (операция сложения идентична слиянию, поскольку младший байт регистра Н в данный момент равен 0), при этом гарантируется, что между байтами не будет переноса. Результат снова сохраняется в регистре Н. С этого момента происходят те же действия, что и в стандартной команде IL0AD. Вместо того чтобы дублировать последние микрокоманды (от iload3 до iload5) команды IL0AD, мы просто совершили переход от wide_iload4 к iload3. Отметим, что во время выполнения этой команды значение PC должно увеличиваться на 1 дважды, чтобы в конце этот регистр указывал на следующий код операции. Комаргда IL0AD увеличивает значение один раз; последовательность команд WIDEIL0AD также увеличивает это значение один раз.

Такая же ситуация имеет место при выполнении WIDEISTORE. После первых четырех микрокоманд (от wideistorel до wide_istore4) последовательность действий та же, что и в команде I STORE после первых двух микрокоманд, поэтому мы совершаем переход от wide_istore4 к istore3.

Далее мы рассмотрим команду LDCW. Есть два отличия этой команды от ILOAD. Во-первых, она содержит 16-разрядное смещение без знака (как и расширенная версия ILOAD), во-вторых, эта команда индексируется из регистра СРР, а не из LV, поскольку она считывает значение из набора констант, а не из фрейма локальных переменных. (Существует еще и краткая форма этой команды — LDC, но мы не стали включать ее в машину IJVM, поскольку полная форма содержит в себе все варианты краткой формы, хотя при этом занимает 3 байта вместо 2.)

Команда IINC — единственная команда, помимо IST0RE, которая может изменять локальную переменную. Она включает в себя два операнда по одному байту, как показано на рис. 4.16.

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

Рис. 4.16. Команда IINC содержит два поля операндов

Поле индекса нужно для того, чтобы определить смещение от начала фрейма локальных переменных. Команда считывает эту переменную, увеличивает ее на константу (константа содержится во втором поле) и помещает результат обратно в ту же ячейку памяти. Отметим, что константа является 8-разрядным числом со знаком в промежутке от -128 до +127. Машина JVM поддерживает расширенную версию этой команды, в которой длина каждого операнда составляет 2 байта.


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

.