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

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


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

В начале третьего цикла (iadd3) MDR содержит второе слагаемое, вызванное из памяти. В этом цикле оно прибавляется к значению регистра H, а результат сохраняется обратно в регистрах MDR и TOS. Кроме того, начинается операция записи, в процессе которой новое верхнее слово стека сохраняется в памяти. В этом цикле команда goto приписывает адрес Mai ni регистру MPC, и таким образом мы возвращаемся к исходному пункту, и можем начать выполнение следующей операции.

Если следующий код IJVM-операции, который содержится в данный момент в регистре MBR, равен 0x64 (ISUB), то повторяется практически та же последовательность действий. После выполнения Mai ni управление передается микрокоманде с адресом 0x64 (isubl). За этой микрокомандой следуют isub2, isub3, а затем снова Mai ni. Единственное различие между этой и предыдущей последовательностями состоит в том, что в цикле isub3 содержимое регистра H не прибавляется к значению MDR, а вычитается из него.

Команда IAND идентична командам IADD и ISUB, только в данном случае два верхних слова стека подвергаются логическому умножению (операция И), а не

складываются и не вычитаются. Нечто подобное происходит и во время выполнения команды I0R.

Если код операции соответствует команде DUP, POP или SWAP, то нужно использовать стек. Команда DUP дублирует верхнее слово стека. Поскольку значение этого слова уже находится в регистре TOS, нужно просто увеличить SP на 1. После этого регистр SP будет указывать на новый адрес. В эту новую ячейку и записывается значение регистра TOS. Команда POP тоже достаточно проста: нужно только уменьшить значение SP на 1, чтобы отбросить верхнее слово стека. Однако после этого необходимо считать новое верхнее слово стека из памяти и записать его в регистр TOS. Наконец, команда SWAP меняет местами значения двух ячеек памяти, а именно — два верхних слова стека. Регистр TOS уже содержит одно из этих значений, поэтому считывать его (значение) из памяти не нужно. Подробнее мы обсудим эту команду немного позже.

Команда BIPUSH сложнее предыдущих, поскольку за кодом операции следует байт, как показано на рис. 4.13. Этот байт представляет собой целое число со знаком. Указанный байт, который был передан в регистр MBR во время выполнения микрокоманды Mai ni, нужно расширить до 32 бит (знаковое расширение) и скопировать его в регистр MDR. Затем значение SP увеличивается на 1 и копируется в MAR, что позволяет записать операнд на вершину стека. Этот операнд также должен копироваться в регистр TOS. Отметим, что значение регистра PC требуется увеличить на 1, чтобы в микрокоманде Mai ni имелся код следующей операции.

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

Рис. 4.13. Формат команды BIPUSH

Теперь рассмотрим команду IL0AD. В этой команде за кодом операции также следует байт (рис. 4.14, а), но этот байт представляет собой индекс (без знака), используемый для того, чтобы найти в пространстве локальных переменных слово, которое нужно поместить в стек. Поскольку здесь имеется всего 1 байт, доступно только 28 = 256 слов, а именно первые 256 слов пространства локальных переменных. Для выполнения команды IL0AD требуются и чтение (чтобы вызвать слово), и запись (чтобы поместить его в стек). Чтобы определить адрес для считывания, нужно прибавить смещение, которое хранится в регистре MBR (это буферный регистр памяти), к содержимому регистра LV. Доступ к регистрам MBR и LV можно получить только через шину В, поэтому сначала значение LV копируется в регистр Н (в цикле iloadl), а затем прибавляется значение MBR. Результат суммирования копируется в регистр MAR, и начинается процесс чтения (в цикле iload2).


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

.