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

13.Умножение двоичных чисел со знаком

Для умножения чисел со знаком предназначена команда IMUL. Эта команда имеет три формы, различающиеся количеством операндов:

  • С одним операндом — форма, аналогичная команде MUL. В качестве операнда указывается множитель. Местоположение другого множителя и результата определяется по таблице.

  • С двумя операндами — указываются два множителя. Результат записывается на место первого множителя. Старшая часть результата в этом случае игнорируется. Кстати, эта форма команды не работает с операндами размером 1 байт.

  • С тремя операндами — указывается положение результата, первого и второго множителя. Второй множитель должен быть непосредственным значением. Результат имеет такой же размер, как первый множитель, старшая часть результата игнорируется. Это форма тоже не работает с однобайтными множителями.

Примеры:

imul cl ;AX = AL * CL

imul si ;DX:AX = AX * SI

imul bx,ax ;BX = BX * AX

imul cx,-5 ;CX = CX * (-5)

imul dx,bx,134h ;DX = BX * 134h

CF = OF = 0, если произведение помещается в младшей половине результата, иначе CF = OF = 1. Для второй и третьей формы команды CF = OF = 1 означает, что произошло переполнение.

14.Деление двоичных чисел со знаком

Для деления чисел со знаком предназначена команда IDIV. Единственным операндом является делитель. Местоположение делимого и частного определяется также, как для команды DIV. Эта команда тоже генерирует прерывание при делении на ноль или слишком большом частном.

Пример программы

Допустим, в программе требуется вычислять координату какого-то движущегося объекта по формуле:

x = x0 + v0t + at2/2

Все числа в правой части — 8-битные целые без знака, а x — 16-битное целое и тоже без знака. Здесь нужно внимательно следить за размерами операндов.

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

Логические операции с битами - OR, XOR, AND, NOT. Эти команды работают с приемником и источником, исключение команда 'NOT'. Каждый бит в приемнике сравнивается с тем же самым битом в источнике, и в зависимости от команды, 0 или 1 помещается в бит приемника: AND (логическое И) устанавливает бит результата в 1, если оба бита, бит источника и бит приемника установлены в 1.  OR (логическое ИЛИ) устанавливает бит результата в 1, если один из битов, бит источника или бит приемника установлен в 1.  XOR (НЕ ИЛИ) устанавливает бит результата в 1, если бит источника отличается от бита приемника.  NOT инвертирует бит источника.      Пример:  mov ax, 3406d  mov dx, 13EAh  xor ax, dx 

16.Метки

1. Имя метки, после которого ставится двоеточие. Это самый простой способ. Обычно так объявляются метки в коде.

exit_app:

mov ax,4C00h

int 21h

17.Безусловные переходы

Безусловные переходы

Безусловный переход — это переход, который выполняется всегда. Безусловный переход осуществляется с помощью команды JMP. У этой команды один операнд, который может быть непосредственным адресом (меткой), регистром или ячейкой памяти, содержащей адрес. Существуют также «дальние» переходы — между сегментами, однако здесь мы их рассматривать не будем. Примеры безусловных переходов:

jmp metka ;Переход на метку

jmp bx ;Переход по адресу в BX

jmp word[bx] ;Переход по адресу, содержащемуся в памяти по адресу в BX

18.Процедуры

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

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

ИмяПроцедуры PROC расстояние ; тело процедуры ИмяПроцедуры ENDP

Атрибут расстояние может принимать значения near или far и характеризует возможность обращения к процедуре из другого сегмента кода.

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

  • в начале программы (до первой исполняемой команды);

  • в конце (после команды, возвращающей управление операционной системе);

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