Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KOMAROV.DOC
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.32 Mб
Скачать

1.17.9. Многофункциональные команды

А) ВЫЧИСЛЕНИЯ С ЧТЕНИЕМ ПАМЯТИ

<ALU>

, dreg =

DM(

I0

,

M0

)

;

<MAC>

I1

M1

<SHIFT>

I2

M2

I3

M3

I4

M4

I5

M5

I6

M6

I7

M7

PM(

I4

,

M4

)

I5

M5

I6

M6

I7

M7

Синтаксис:

Допустимые dreg:

AX0 MX0 SI

AX1 MX1 SE

AY0 MY0 SR0

AY1 MY1 SR1

AR MR0

MR1

MR2

Описание: Команда выполняет означенную арифметическую операцию одновременно с пересылкой данного. Операция чтения пересылает содержимое источника в регистр назначения. Метод адресации только регистровый косвенный с последующей модификацией содержимого I регистра. Для линейной (не кольцевой) адресации L регистр, соответствующий I регистру, должен быть обнулен. Содержимое источника записывается в регистр назначения всегда с правым выравниванием.

Операция вычисления должна быть безусловной. Допустимы все команды ALU, MAC и SHIFTER кроме команд непосредственных сдвигов, а также команд DIVS и DIVQ.

Фундаментальным принципом выполнения многофункциональных команд является то, что регистры (и память) считываются в начале цикла выполнения команда, а записываются в конце. Для реализации этого принят обычный (слева направо) порядок записи составляющих элементов команды: сначала арифметическая операция, а затем операция чтения. Программист может нарушить этот порядок записи, но ассемблер, выдав предупреждение, сгенерирует одинаковый машинный код. Выдачу предупреждения можно подавить, отключив проверку семантики с помощью ключа s.

Принятый порядок доступа к регистрам данных вычислительных устройств (сначала считывание, потом запись) позволяет использовать один и тот же регистр в качестве источника для одной операции и приемника для другой. Например, команда

AR = AX0 + AY0, AX0 = DM(I0, M0);

является правильной, причем содержимое АХ0 сначала считывается для выполнения арифметической операции, а затем записывается операцией пересылки. Можно эту команду записать в обратном порядке

AX0 = DM(I0, M0), AR = AX0 + AY0;

но ассемблер, выдав предупреждение, сформирует такой же машинный код команды как в первом примере.

Запрещается использовать один и тот же регистр как назначение для обеих операций, поскольку это приводит к непредсказуемому результату, например, следующая команда неверна, хотя ассемблер выдаст только предупреждение

AR = AX0 + AY0, AR = DM(I0, M0);

Флаги состояния: флаги устанавливаются арифметическими командами, как они устанавливаются в не многофункциональных командах (см. пп. 1.17.5-1.17.7).

Б) ВЫЧИСЛЕНИЯ С ПЕРЕСЫЛКОЙ РЕГИСТР-РЕГИСТР

<ALU>

, dreg = dreg

;

<MAC>

<SHIFT>

Синтаксис:

Допустимые регистры dreg см. п. 1.17.9.А.

Пример: AR = AX0 + AY0, AX0 = MR1;

Описание: Процессор выполняет означенную арифметическую операцию одновременно с пересылкой данного. Содержимое источника записывается в регистр назначения всегда с правым выравниванием. Справедливы все положения п. 1.17.9.А.

Флаги состояния: флаги устанавливаются арифметическими командами, как они устанавливаются в не многофункциональных командах (см. пп. 1.17.5-1.17.7).

В) ВЫЧИСЛЕНИЯ С ЗАПИСЬЮ В ПАМЯТЬ

DM(

I0

,

M0

)

= dreg,

<ALU>

;

I1

M1

<MAC>

I2

M2

<SHIFT>

I3

M3

I4

M4

I5

M5

I6

M6

I7

M7

PM(

I4

,

M4

)

I5

M5

I6

M6

I7

M7

Синтаксис:

Допустимые dreg см. п. 1.17.9.А.

Описание: Команда выполняет означенную арифметическую операцию одновременно с пересылкой данного. Операция записи пересылает содержимое регистра источника в память назначения. Метод адресации только регистровый косвенный с последующей модификацией содержимого I регистра. Для линейной (не кольцевой) адресации L регистр, соответствующий I регистру, должен быть обнулен. Содержимое источника записывается в регистр назначения всегда с правым выравниванием.

Операция вычисления должна быть безусловной. Допустимы все команды ALU, MAC и SHIFTER кроме команд непосредственных сдвигов, а также команд DIVS и DIVQ.

Фундаментальным принципом выполнения многофункциональных команд является то, что регистры (и память) считываются в начале цикла выполнения команда, а записываются в конце. Для реализации этого принят обычный (слева направо) порядок записи составляющих элементов команды: сначала операция записи памяти, а затем арифметическая операция. Программист может нарушить этот порядок записи, но ассемблер, выдав предупреждение, сгенерирует одинаковый машинный код. Выдачу предупреждения можно подавить, отключив проверку семантики с помощью ключа s.

Принятый порядок доступа к регистрам данных вычислительных устройств (сначала считывание, потом запись) позволяет использовать один и тот же регистр в качестве источника для одной операции и приемника для другой. Например, команда

DM(I0, M0) = AR, AR = AX0 + AY0;

является правильной, причем содержимое АR сначала считывается для записи в память, а затем записывается (загружается) в ходе выполнения арифметической операции. Можно эту команду записать в обратном порядке

AR = AX0 + AY0, DM(I0, M0) = AR;

но ассемблер, выдав предупреждение, сформирует такой же машинный код команды как в первом примере.

Флаги состояния: флаги устанавливаются арифметическими командами, как они устанавливаются в не многофункциональных командах (см. пп. 1.17.5-1.17.7).

Г) ЧТЕНИЕ ПД И ПП

Синтаксис:

AX0

= DM (

I0

,

M0

),

AY0

= PM (

I4

,

M4

);

AX1

I1

M1

AY1

I5

M5

MX0

I2

M2

MY0

I6

M6

MX1

I3

M3

MY1

I7

M7

Описание: Команда производит одновременно две операции чтения памяти: чтение ПД и чтение ПП. Каждая из этих операций пересылает содержимое ячеек памяти ПД и ПП в регистры назначения, заданные в команде. При этом содержимое ПД пересылается в Х регистры ALU и МАС, а содержимое ПП – в Y регистры ALU и МАС.

Метод адресации только регистровый косвенный с последующей модификацией содержимого I регистра. Для линейной (не кольцевой) адресации L регистр, соответствующий I регистру, должен быть обнулен. Содержимое источника записывается в регистр назначения всегда с правым выравниванием.

На самом деле необходимо считать три слова: два операнда и саму команду. Если не используется внешняя память, то такое считывание происходит за один машинный цикл.

Если из внешней памяти необходимо считать два слова, например, команду и данное или два слова данных из ПД и ПП, то для выполнения команды необходим еще один дополнительный цикл. Если из внешней памяти необходимо считать три слова (команда и два слова данных), то требуется два дополнительных цикла.

Флаги состояния: не изменяются.

Д) ВЫЧИСЛЕНИЯ С ЧТЕНИЕМ ПД И ПП

Синтаксис:

<ALU>

,

AX0

= DM (

I0

,

M0

),

AY0

= PM (

I4

,

M4

);

<MAC>

AX1

I1

M1

AY1

I5

M5

MX0

I2

M2

MY0

I6

M6

MX1

I3

M3

MY1

I7

M7

Описание: Команда одновременно производит операцию вычисления в ALU или MAC и две операции чтения памяти: чтение ПД и чтение ПП. Каждая из пересылочных операций пересылает содержимое ячеек памяти ПД и ПП в регистры назначения, заданные в команде. При этом содержимое ПД пересылается в Х регистры ALU и МАС, а содержимое ПП – в Y регистры ALU и МАС.

Метод адресации только регистровый косвенный с последующей модификацией содержимого I регистра. Для линейной (не кольцевой) адресации L регистр, соответствующий I регистру, должен быть обнулен. Содержимое источника записывается в регистр назначения всегда с правым выравниванием.

На самом деле необходимо считать три слова: два операнда и саму команду. Если не используется внешняя память, то такое считывание происходит за один машинный цикл.

Если из внешней памяти необходимо считать два слова, например, команду и данное или два слова данных из ПД и ПП, то для выполнения команды необходим еще один дополнительный цикл. Если из внешней памяти необходимо считать три слова (команда и два слова данных), то требуется два дополнительных цикла.

Операция вычисления должна быть безусловной. Допустимы все команды ALU, MAC кроме команд непосредственных сдвигов, а также команд DIVS и DIVQ. Результаты вычислений должны быть записаны в регистры результатов вычислительных блоков: результаты ALU в AR, результаты МАС в MR.

Фундаментальным принципом выполнения многофункциональных команд является то, что регистры (и память) считываются в начале цикла выполнения команда, а записываются в конце. Для реализации этого принят обычный (слева направо) порядок записи составляющих элементов команды: сначала арифметическая операция, а затем операции чтения. Программист может нарушить этот порядок записи, но ассемблер, выдав предупреждение, сгенерирует одинаковый машинный код. Выдачу предупреждения можно подавить, отключив проверку семантики с помощью ключа s.

Принятый порядок доступа к регистрам данных вычислительных устройств (сначала считывание, потом запись) позволяет использовать один и тот же регистр в качестве источника для одной операции и приемника для другой. Например, команда

MR=MR+MX0*MY0(UU), MX0 = DM(I0, M0), MY0 = DM(I4, M4);

является правильной, причем содержимое регистров MХ0 и MY0 сначала считывается для выполнения арифметической операции, а затем записывается операциями пересылки. Можно эту команду записать в обратном порядке

MX0 = DM(I0, M0), MY0 = DM(I4, M4), MR=MR+MX0*MY0(UU);

но ассемблер, выдав предупреждение, сформирует такой же машинный код команды как в первом примере.

Флаги состояния: флаги устанавливаются арифметическими командами, как они устанавливаются в не многофункциональных командах (см. пп. 1.17.5-1.17.7).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]