Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекции!!!.doc
Скачиваний:
9
Добавлен:
27.09.2019
Размер:
1.76 Mб
Скачать
  1. Команды чтения-записи

Ч$8, Ч$16, Ч@, Ч@8 - пометка о L/G в младш.бите, так как адр. четные

ЧБЛ8, ЧБГ8, ЧБЛ16, ЧБГ16 – читает байт, в старший байт ставит пометку – L или G

Аналог. с записью: П (+еще 4 вар), ПБЛ, ПБГ – снимаем одну позицию стека в память.

Команды кодируются так [КОП][С8 или С16]

Чтение: Ч адр (ЧС8, ЧС16, Ч@, Ч@8)

Запись: П адр (ПС8, ПС16, П@, П@8) (?)

У обычной процедуры локальных данных обычно около 10. Значит С8 – много, Тогда введем ЧУС4 – однобайтовая команда, Можно сделать и ЧУ С0,С1,С2 – читаем от регистра L со смещением.

Можно читать и константы:

ЧКОН – 16 бит

ЧКБ+, ЧКБ- (8 бит) - берем + и – константы

80% всех констант = 0 или 1, значит делаем Ч0, Ч1– на верхушку стека целых 0, 1.

Для вещественных чисел команды аналогичны (ЧП, ЧУП, ПП, ЧКОНП) и т.д.

Команды писать из стека в память:

П АД, П Ц4, ПУ С4, аналогично для плав и для адр.

  1. Арифметические команды

+ - сложение двух целых со стека целых

-, *, /, ОСТ – аналогично (ВНИМАНИЕ: /-деление нацело)

вид: Р+, РОСТ…(т.е. один операнд в регистре, а др. в память, адр. Идет за командой)

П+, П-, П*, П/ - с плавающей точкой

Также СДВИГ, ЭЛЕМ, БИТ, НЕ, ИЛИ

Для некоммут. операций обратные аналоги типа /П обр

Команды +:= -:= *:= /:= ОСТ:= ИЛИ:=

НЕЧЕТ, ИНД, ДЕК, -1, АБС, ЗНАК, ОКР, ВЕЩ,, ЦЕЛ, -1П, АБСП, ЗНАКП(плав)

  1. Логические команды

Логические команды: И(в смысле +), ИЛИ…

Пример: a/\b\/c/\d

Чa

Чb

И

Чc

Чd

И

ИЛИ

Можно использовать и операторы сравнения (сравнивается верхушка с подверхушкой стека и на стек кладется 0 или 1). Важен только последний бит, отрицание - НЕ1

Вычисл. Логич выраж по Маккарти (вычисл. только одна часть имеет смысл в if, но дольше работает при присваивании)

  1. Передача управления

Команды передачи управления

РК – регистр команд - РКОМ

PC – указывает на следующую команду (program counter) - СЧАК

ПБ М16 – переход безусловный на М16 от РК, П1 М16, П0 М16

В0У М8, В1У М8, Н0У М8, Н1У М8 – укороченные в стеке целых

В М16 – вперёд

Н М16 – назад

ВБУ М8, НБУ М8 – укороченные команды

В 0 – переход на следующую команду (переход, считая от РС), ибо PC указывает всегда на следующую команду относительно исполняемой. Можно и ВУ 0.

Н 2 – переход на себя (команда перехода занимает 2 байта)

If усл then … else …

0 – false, 1- true

В0 – перейти по false

В1 – перейти по true

В=, В/=, В<, В<=, В>, В>= - объединение нескольких действий, верхушка стека сравнивается с 0,

“В0У” + “=” = В=У, ост. Ан-но

Если переход произошел, то надо разогнать водопровод (3-4 такта).

ВЫБОР Н8+1 М16 …М16 обрабат до 256 меток. Если “0” то идем по первой метке. Команда должна начинаться с четного адр. (если нечетный то ставим НОП)

  1. Организация циклов

For I from A by B to C while D do E od

For I to n do E od - 90%, to n do, while D do.

Борьба с циклами – предсказан. переходов

Циклы

t o N do:

КСЧ – конец по счётчику, вычитает 1 из верхушки стека, если стало 0, выходим.

Е сли N было неположительным, то надо сразу уйти. Сделать так:

Ч N – записать N на стек НСЧ – начало по счётчику: N>0?

ЧР0 – размножить N на стеке

В<= - сравнить N с нулём

( НСЧ

нач:

Е

КСЧ [y]

Кон:

)

while D do E od

М: В0 [y] конец

E

НБ М

Конец:

for i:=1 to N do:

Ч 1 – записать 1 в стек

Ч N – записать N в стек

ЦК – проверяет, что i<=N, если да, то переходим на следующую итерацию цикла.

КЦ – конец цикла, добавляет 1 к подверхушке стека, сравнивает с верхушкой, если <=, то переходим на ЦК КОН

(Нач: ЦИКЛ С8/C16

Е E

КЦ

Кон) КОНЦИКЛ

Поддерживает цик в разн. направлен.