- •1. Регистры общего назначения:
- •Добавление элемента в стек
- •9. Вычитание двоичных чисел без знака
- •10.Вычитание двоичных числе со знаком
- •11. Умножение двоичных чисел без знака
- •12. Деление двоичных чисел без знака
- •13.Умножение двоичных чисел со знаком
- •Пример программы
- •Безусловные переходы
- •19.Команда сравнения, усл переход для ком-ды сравнения.
- •20.Команды условного перехода по состоянию флагов
- •21.Организация циклов
- •Команда loop
- •Cmp eax, ebx; {сравниваем eax с ebx} je @IfNot; {если равны, то переходим на иначе} используются команды сравнения
- •Епочечные команды
- •Ins адрес_приемника,номер_порта insb insw insd
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 и характеризует возможность обращения к процедуре из другого сегмента кода.
Процедура может размещаться в любом месте программы, но так, чтобы на нее случайным образом не попало управление. Если процедуру просто вставить в общий поток команд, то микропроцессор будет воспринимать команды процедуры как часть этого потока. Учитывая это обстоятельство, есть следующие варианты размещения процедуры в программе:
в начале программы (до первой исполняемой команды);
в конце (после команды, возвращающей управление операционной системе);
