Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler_konspekt_1.doc
Скачиваний:
16
Добавлен:
10.11.2019
Размер:
274.94 Кб
Скачать

Стековые команды

а) PUSH op; запись слова в стек, флаги не модифицируются

ор – может быть в регистре (в том числе и в сегментном) или в ячейке памяти, но не непосредственный операнд.

Алгоритм выполнения:

  • декремент значения SP:=SP–2;

  • пересылка содержимого ор на сводную ячейку стека с адресом [SS:SP] (в польской инверсной записи).

Пример:

PUSH AX

Примечание: Если организуется стековый сегмент в максимальном объеме (64КБ), то при полном заполнении, происходит разрушение ранее записанной информации (см. рис.12)

Рис.12

Если стек имеет меньший размер, то при полном его заполнении каждое новое обращение разрушает область памяти вне стекового сегмента (см. рис.13).

SS 128Б

Рис. 13

б) РОР ор ; чтение слова из стека

ор – аналогично PUSH.

Алгоритм выполнения:

  • слово из ячейки стека пересылается в ор (порядок байтов восстанавливается),

  • инкремент SP := SP +2

Пример:

POP CX

Примечание:

Если пытаться считывать из пустого стека, то ошибка не фиксируется, а считывается слово, следующее за сегментом стека.

в) PUSHF ; копирование слова из регистра FLAGS в стек

POPF ; копирование слова из стека в регистр FLAGS

ор отсутствует, флаги не изменяются.

Эти команды позволяют модифицировать флаг TF. Т.к. другого пути воздействия на TF нет, то нужно выполнить засылку флага в стек, затем изменить 8-й бит и записать новое значение из стека в регистр FLAGS.

Доступ к элементам стека с помощью регистра вр

Доступ к любому слову, хранящемуся в стеке, осуществляется на основе определения расстояния от нужного слова до вершины стека и базовой адресации.

Например:

MOV BP,SP ; BP := SP

MOV AX,[BP+4] ; эквивалентно MOV AХ, SS:[BP+4]

Примечание: ВР по умолчанию относится к сегменту стека, а не к сегменту данных.

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

Это наиболее важная часть системы команд, тесно связанная со структурой ПЭВМ, и является промежуточным звеном между командами МП и командами языка ассемблера; наибольший интерес при этом представляют методы адресации, используемые для определения адреса ячейки памяти, которой передается управление.

Близкие и далекие переходы.

Мнемоники команд переходов в ЯА образуются от слова Jump.

Например, безусловный переход:

JMP оp,

где ор – имя команды, которой передается управление (т.е. метка).

Команды перехода модифицируют указатель команд IP и, возможно, регистр сегмента команд CS и бывают двух типов:

  • если команда изменяет только IP , т.е. передача управления внутри сегмента, то переход называется ближний переход NEAR.

  • если изменяется пара регистров CS:IP, - это межсегментный переход или далекий переход FAR.

Адрес перехода ассоциируется с меткой команды. Метка – это имя команды, которое располагается до мнемоники команды и отделяется двоеточием. Любая программная метка (включая имя процедуры) имеет атрибут NEAR или FAR.

Например,

АМ1: ADD AX,4

………………….

JMP AM1

Адресация в переходах.

а) Прямая адресация.

Команда содержит в себе базовый адрес сегмента и смещение. Это допускается только в командах межсегментного перехода или вызова процедур. Метка, которой передается управление, должна иметь атрибут FAR.

JMP CATS

где CATS – метка команды или имя процедуры.

б) Косвенная адресация

Адрес перехода содержится в регистре или ячейке памяти. Это допускается для межсегментных и внутрисегментных переходов.

JMP AX ; в АХ заранее помещен перехода

JMP NEAR COD[BX]

Во втором примере есть явное указание типа перехода (NEAR – оператор в команде), COD[BX] – базовая адресация команды, которой передается управление.

в) Относительная адресация

Место перехода указывается как некоторое расстояние от самой команды перехода. Эффективный адрес перехода вычисляется суммированием индекса смещения, находится в команде и текущего значения указателя команд IP.

Имеется 2 типа:

  1. с 1Б индексным смещением, обеспечивает передачу управления в диапазоне (-128:128Б) (SHORT)

  2. с 2Б индексным смещением

(-32 768:32768Б) от текущей команды NEAR

Операндом является метка с атрибутом NEAR, по которой ассемблер автоматически вычисляет значение. В команде может быть указан тип перехода:

mov w, offset L1; (в ячейку w записывается смещение L1 относительно текущей команды offset – смещение)

JMP w или JMP SHORT w

Команды условных переходов

Делятся на 2 группы:

а) операторы, анализирующие результаты предыдущей команды (флаги) – условный переход в классическом понимании. Они имеют только 1-байтовое смещение.

Если условный переход требует удаление более чем на 128Б (30-40 команд), то используется комбинация условного и безусловного перехода.

Например:

Требуется NEAR переход на метку ZERO по флагу ZF=1, тогда

………..

JNZ CONTINUE; if ZF<>1 then continue

JMP ZERO

CONTINUE

Т.е. используется условный переход по противоположному признаку, а по ZF=1 получим 2-хбайтовый переход.

Мнемоника условного перехода сложна, таких переходов более 20. Некоторые очевидны. Для образовании мнемоники используют следующие сокращения:

E – equal (=)

N – not (не)

G – больше для знаковых целых

L – меньше для знаковых целых

A – above (выше) беззнаковых

B –below (ниже) для беззнаковых

В условных переходах используется после J от одной до трех букв (из перечисленных выше).

Например, после сравнения чисел результат ор1<ор2, возможны 2 команды, эквивалентные между собой для одного и того же перехода.

  • Для знаковых JL ADRES

JMGE ADRES

  • Для беззнаковых JB ADRES

JNA ADRES

б) команды управления циклом

LOOP ор

Управление циклом по счетчику, где ор – метка первой команды цикла, цикл управляется счетчиком в СХ.

Команда LOOP уменьшает содержимое СХ (dec СХ) и передает управление в начало цикла, если содержимое СХ<>0, иначе управление передается команде следующей за LOOP.

Обычно цикл оформляется следующим образом.

mov CX,N ; СХ = числу переходов цикла

L1: ……… начало цикла

……………….

LOOP L1;

Команда LOOP эквивалентна 3-м командам:

Dec CX

Cmp CX, 0

Jne L1

Особенности команды LOOP:

  • счетчик цикла находится только в CX;

  • начальное значение загружается в CX>0 до входа в цикл;

  • команды прохода цикла выполняются хотя бы один раз;

  • LOOP осуществляет переход типа SHORT, поэтому проход цикла не должен занимать 128Б (30-40 команд); если нужен более длинный проход цикла, то используется сочетание условных и безусловных переходов;

  • CX может использоваться как операнд в цикле, но не должен изменяться другими командами.

Есть и другие команды управления циклом.

Например, команды перехода по циклу с дополнительным условием, а именно с учетом флага ZF. Можно использовать 2 эквивалентные записи:

LOOPE op

LOOPZ op

Здесь цикл повторяется CX раз, пока сохраняется ZF=1, что соответствует сложному условию передачи управления CX<>0 AND ZF=1.

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

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