Статус нашего сайта: |
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В начале третьего цикла (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). |