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

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


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

А теперь рассмотрим три команды условного перехода: IFLT, IFEQ и IFICMPEQ. Первые две выталкивают верхнее слово из стека и совершают переход в том случае, если это слово меньше 0 или равно 0 соответственно. Команда IFICMPEQ берет два верхних слова из стека и совершает переход, если они равны. Во всех трех случаях необходимо считывать новое верхнее слово стека и помещать его в регистр TOS.

Эти три команды сходны. Сначала операнд или операнды помещаются в регистры, затем в TOS записывается новое верхнее слово стека, наконец, происходит сравнение и осуществляется переход. Сначала рассмотрим IFLT. Слово, которое нужно проверить, уже находится в регистре TOS, но поскольку команда IFLT выталкивает слово из стека, нужно считать из памяти новую вершину стека и сохранить ее в регистре TOS. Процесс считывания начинается в микрокоманде ifltl. Во время iflt2 проверяемое слово сохраняется в регистре ОРС, поэтому новое значение можно сразу поместить в регистр TOS, и при этом предыдущее значение не пропадет. В цикле i f 113 новое верхнее слово стека, которое уже находится в MDR, копируется в регистр TOS. Наконец, в цикле iflt4 проверяемое слово (оно находится в регистре ОРС) пропускается через АЛУ без сохранения результата, после чего проверяется бит N. Если после проверки условие подтверждается, микрокоманда осуществляет переход к Т, а если не подтверждается — к F.

Если условие подтверждается, то происходят те же действия, что и в начале команды GOTO, и далее осуществляется переход к goto2. Если условие не подтверждается, необходима короткая последовательность микрокоманд (F, F2 и F3), чтобы пропустить оставшуюся часть команды (смещение), возвратиться к Mai ni и перейти к следующей команде.

Команда IFEQ аналогична команде IFLT, только вместо бита N используется бит Z. В обоих случаях ассемблер должен убедиться, что адреса микрокоманд F и Т различаются только крайним левым битом.

Команда IF_ICMPEQ в целом похожа на команду IFLT, только здесь нужно считывать еще и второй операнд. Второй операнд сохраняется в регистре H во время цикла if_icmpeq3, где начинается чтение нового верхнего слова стека. Текущее верхнее слово стека сохраняется в ОРС, а новое загружается в регистр TOS. Наконец, микрокоманда if_icmpeq6 аналогична ifeq4.

Теперь рассмотрим команды INVOKEVIRTUAL и I RETURN. Как отмечалось в подразделе «Набор IJVM-команд» раздела «Пример архитектуры набора команд — IJVM», они служат для вызова процедуры и выхода из нее. Команда INVOKEVIRTUAL представляет собой последовательность из 22 микрокоманд. Это самая сложная команда машины IJVM. Последовательность действий при выполнении этой команды иллюстрирует рис. 4.10. 16-разрядное смещение используется для того, чтобы определить адрес вызываемой процедуры. Номер адреса процедуры находится в наборе констант. Следует помнить, что первые 4 байта каждой процедуры — не команды, а два 16-разрядных указателя. Первый из них позволяет узнать число параметров (включая OBJREF — см. рис. 4.10), второй — размер области локальных переменных (в словах). Эти поля вызываются через 8-раз рядный порт и объединяются таким же образом, как 16-разрядное смещение в одной команде.


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

.