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

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


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

Таблица 4.3. Микропрограмма для микроархитектуры Mic-1

Микрокоманда

Операции

Комментарий

Maini

РС = РС+ 1; fetch; goto(MBR)

MBR содержит код операции; получение следующего байта; отсылка

порі

goto Mainl

Ничего не происходит

iadcM

MAR = SP = SP - 1; rd

Чтение слова, идущего после верхнего слова стека

iadd2

H = TOS

Н = вершина стека

iadd3

MDR = TOS = MDR + H; wr; goto Mainl

Суммирование двух верхних слов; запись суммы в верхнюю позицию стека

isubl

MAR = SP = SP - 1; rd

Чтение слова, идущего после верхнего слова стека

isub2

H = TOS

Н = вершина стека

isub3

MDR = TOS = MDR - H; wr; goto Mainl

Вычитание; запись результата в вершину стека

Микрокоманда

Операции

Комментарий

iancM

MAR = SP = SP - 1; rd

Чтение слова, идущего после верхнего слова стека

iand2

H = TOS

Н = вершина стека

iand3

MDR = TOS = MDR И H; wr; goto Mainl

Операция И; запись результата в вершину стека

ior1

MAR = SP = SP - 1; rd

Чтение слова, идущего после верхнего слова стека

ior2

H = TOS

Н = вершина стека

іогЗ

MDR = TOS = MDR ИЛИ H; wr; goto Mainl

Операция ИЛИ; запись результата в вершину стека

dupl

MAR = SP = SP + 1

Увеличение SP на 1 и копирование результата в регистр MAR

dup2

MDR = TOS; wr; goto Mainl

Запись нового слова в стек

pop1

MAR = SP = SP - 1; rd

Чтение слова, идущего после верхнего слова стека

pop2

 

Программа ждет, пока считается из памяти новое значение регистра TOS

рорЗ

TOS = MDR; goto Mainl

Копирование нового слова в регистр TOS

swapl

MAR = SP = SP - 1; rd

Установка регистра MAR на значение SP -1; чтение второго слова из стека

swap2

MAR = SP

Установка регистра MAR на верхнее слово стека

swap3

H = MDR; wr

Сохранение значения TOS в регистре Н; запись второго слова в вершину стека

swap4

MDR = TOS

Копирование прежнего значения TOS в регистр MDR

swap5

MAR - SP - 1; wr

Установка регистра MAR на значение SP-1; запись второго слова в стек

swap6

TOS = H; goto Mainl

Обновление TOS

bipushl

SP = MAR = SP + 1

MBR = байт, который нужно поместить в стек

bipush2

PC = PC + 1; fetch

Увеличение PC на 1; вызов кода следующей операции

bipush3

MDR = TOS = MBR; wr; goto Mainl

Добавление к байту дополнительного знакового разряда и запись значения в стек

iloadl

H = LV

MBR содержит индекс; копирование значения LV в Н

iload2

MAR = MBRU + H; rd

MAR = адрес локальной переменной, которую нужно поместить в стек

iload3

MAR = SP = SP +1

Регистр SP указывает на новую вершину стека; подготовка к записи

iload4

PC = PC + 1; fetch; wr

Увеличение значения PC на 1; вызов кода следующей операции; запись вершины стека

Продолжение &

Таблица 4.3 (продолжение)

Микрокоманда

Операции

Комментарий

iload5

TOS = MDR; goto Mainl

Обновление TOS

istorel

H = LV

MBR содержит индекс; копирование значения LV в Н

istore2

MAR = MBRU + H

MAR = адрес локальной переменной,

в которой нужно сохранить слово из стека

istore3

MDR = TOS; wr

Копирование значения TOS в регистр MDR; запись слова

istore4

SP= MAR = SP - 1; rd

Чтение из стека второго слова сверху

istore5

PC = PC + 1; fetch

Увеличение PC на 1; вызов следующего кода операции

istore6

TOS = MDR; goto Mainl

Обновление TOS

widel

PC = PC+ 1;fetch

Вызов байта операнда или кода следующей операции

wide2

goto(MBR ИЛИ 0x100)

Межуровневый переход к старшим адресам

widejloadl

PC = PC + 1 ;fetch

MBR содержит первый байт индекса; вызов второго байта

wide_iload2

H = MBRU « 8

Н = первый байт индекса, сдвинутый влево на 8 бит

wide_iload3

H=MBRU ИЛИ H

Н = 16-разрядный индекс локальной переменной

wide_iload4

MAR = LV + H; rd; goto iload3

MAR = адрес локальной переменной, которую нужно записать в стек

widejstorel

PC = PC + 1 ;fetch

MBR содержит первый байт индекса; вызов второго байта

wide_istore2

H = MBRU « 8

Н = первый байт индекса, сдвинутый влево на 8 бит

wide_istore3

H = MBRU ИЛИ H

Н = 16-разрядный индекс локальной переменной

wide_istore4

MAR = LV + H; rd; goto istore3

MAR = адрес локальной переменной, в которую нужно записать слово из стека

Idc_w1

PC = PC + 1;fetch

MBR содержит первый байт индекса; вызов второго байта

Idc_w2

H = MBRU « 8

Н = первый байт индекса, сдвинутый влево на 8 бит

Idc_w3

H = MBRU ИЛИ H

Н = 16-разрядный индекс константы в наборе констант

Idc_w4

MAR = H + CPP; rd; goto iload3

MAR = адрес константы в наборе констант

und

H = LV

MBR содержит индекс; копирование значения LV в Н

iinc2

MAR = MBRU+H; rd

Копирование суммы значения LV и индекса в регистр MAR; чтение переменной

ііпсЗ

PC = PC + 1; fetch

Вызов константы

Микрокоманда

Операции

Комментарий

iinc4

H = MDR

Копирование переменной в регистр H

iinc5

PC = PC + 1 ; fetch

Вызов следующего кода операции

ііпсб

MDR = MBR + H; wr; goto Mainl

Запись суммы в регистр MDR; обновление переменной

gotol

OPC = PC - 1

Сохранение адреса кода операции

goto2

PC = PC + 1 ; fetch

MBR = первый байт смещения; вызов второго байта

goto3

H = MBR « 8

Сдвиг первого байта влево на 8 бит и сохранение его в регистре H

goto4

H = MBRU ИЛИ H

H =16-разрядное смещение перехода

goto5

PC = OPC + H; fetch

Суммирование смещения и ОРС

goto6

goto Mainl

Ожидание вызова следующего кода операции

ifltl

MAR = SP = SP - 1 ; rd

Чтение второго сверху слова в стеке

iflt2

OPC = TOS

Временное сохранение TOS в ОРС

iflt3

TOS = MDR

Запись новой вершины стека в TOS

iflt4

N = OPC; if(N) goto T; else goto F

Переход по биту N

ifeql

MAR = SP = SP - 1 ; rd

Чтение второго сверху слова в стеке

ifeq2

OPC = TOS

Временное сохранение TOS в ОРС

ifeq3

TOS = MDR

Запись новой вершины стека в TOS

ifeq4

Z = OPC; if(Z) goto T; else goto F

Переход по биту Z

if_icmpeq1

MAR = SP = SP - 1 ; rd

Чтение второго сверху слова в стеке

if_icmpeq2

MAR = SP = SP - 1

Установка регистра MAR на чтение новой вершины стека

if_icmpeq3

H = MDR; rd

Копирование второго слова из стека в регистр H

if_icmpeq4

OPC = TOS

Временное сохранение TOS в ОРС

if_icmpeq5

TOS = MDR

Помещение новой вершины стека в TOS

if_icmpeq6

Z = OPC - H; if(Z) goto T; else goto F

Если два верхних слова равны, осуществляется переход к Т; если они не равны, осуществляется переход к F

T

OPC = PC - 1 ; fetch; goto goto2

То же, что gotol ; нужно для адреса целевого объекта

F

PC = PC + 1

Пропуск первого байта смещения

F2

PC = PC + 1 ; fetch

PC указывает на следующий код операции

F3

goto Mainl

Ожидание вызова кода операции

invoke_virtual1

PC = PC + 1 ; fetch

MBR = первый байт индекса; увеличение PC на 1 ; вызов второго байта

invoke_virtual2

H = MBRU « 8

Сдвиг первого байта на 8 бит

и сохранение значения в регистре H

Продолжение &


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

.