Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа испр.docx
Скачиваний:
22
Добавлен:
30.07.2019
Размер:
734.58 Кб
Скачать

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

В программе используются некоторые арифметические команды, с помощью которых проводятся вычисления. К арифметическим командам относят следующие:

- add приемник, источник

- sub приемник, источник

- mul источник

- div источник

- inc приемник

- dec приёмник

- neg приемник

Рассмотрим подробнее те которые используются в программе

ADD (ADDition)

Команда add используется для сложения двух целочисленных операндов. Результат сложения помещается по адресу первого операнда. Если результат сложения выходит за границы операнда приемник (возникает переполнение), то учесть эту ситуацию следует путем анализа флага CF и последующего возможного применения команды adc.

SUB (SUBtract)

Команда sub используется для выполнения вычитания целочисленных операндов или для вычитания младших частей значений многобайтных операндов.

DEC (DECrement operand by 1)

Команда dec используется для уменьшения значения байта, слова, двойного слова в памяти или регистре на единицу. При этом команда не воздействует на флаг CF.

INC

Назначение: увеличение значения операнда в памяти или регистре на единицу.

4.1.3 Циклический сдвиг

RCL (Rotate operand through Carry flag Left)

Команда rcl используется для циклического сдвига разрядов операнда влево. Особенность этого сдвига в том, что он происходит с некоторой задержкой, так как очередной сдвигаемый бит оказывается на некоторое время вне операнда. В это время можно произвести его извлечение и (или) подмену. Другой важный момент заключается в том, что для счетчика сдвига микропроцессор использует только пять младших разрядов операнда количество_разрядов. Таким образом, значение, большее 31, микропроцессором не допускается (аппаратно это ограничение реализуется тем, что игнорируются значения всех битов счетчика, кроме первых пяти).

4.1.4 Циклы

LOOP (LOOP control by register cx)

Команду loop применяют для организации цикла со счетчиком. Количество повторений цикла задается значением в регистре ECX/CX перед входом в последовательность команд, составляющих тело цикла. Помните о двух важных моментах: для предотвращения выполнения цикла при нулевом ECX/CX используйте команду jecxz/jcxz. Если этого не сделать, то при изначально нулевом ECX/CX цикл повторится 4 294 967 295/65 536 раз;

смещение метки, являющейся операндом loop, не должно выходить из диапазона -128...+127 байт. Это смещение, как и в командах условного перехода, является относительным от значения счетчика адреса следующей за loop команды.

4.1.5 Синтаксис процедуры

На языке ассемблера процедура оформляется следующим образом:

метка proc тип_адресации

;тело процедуры

метка endp

CALL

Команда call позволяет организовать гибкую и многовариантную передачу управления на подпрограмму с сохранением адреса точки возврата.

RET (RETurn)

Команду ret необходимо применять для возврата управления вызывающей программе из процедуры, управление которой было передано по команде call. На самом деле микропроцессор имеет три варианта команды возврата ret - это ret, ее синоним retn, а также команда retf. Они отличаются типами процедур, в которых используются. Команды ret и retn служат для возврата из процедур ближнего типа. Команда retf — команда возврата для процедур дальнего типа. Какая конкретно команда будет использоваться, определяется компилятором; программисту лучше использовать команду ret и доверить транслятору самому сгенерировать ее ближний или дальний вариант. Количество команд ret в процедуре должно соответствовать количеству точек выхода из нее.