Статус нашего сайта: |
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А теперь рассмотрим три команды условного перехода: 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-разрядное смещение в одной команде. |