Команды умножения и деления двоичных чисел 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Команды умножения и деления двоичных чисел



Применяются для выполнения операций умножения и деления над двоичными числами. Их описание представлено в табл. 1.5.

Таблица 1.5

Формат команд умножения и деления

Название команды Мнемоника и формат команды Описание действия
Умножить без знака MUL SRC См. табл. 1.6
Умножить со знаком IMUL SRC См. табл. 1.6
Делить без знака DIV SRC См. табл. 1.7
Делить со знаком IDIV SRC См. табл. 1.7

Особенностью операций умножения и деления является наличие в команде всего одного операнда (сомножителя или делителя), который может быть задан с помощью любого режима адресации данных, кроме непосредственного (находиться в памяти или в регистре). Второй операнд задан неявно; его местоположение фиксировано и зависит от размера операндов. Знаки результатов в операциях со знаком определяются по алгебраическим правилам.

Варианты размеров сомножителей, мест размещения второго операнда и результата для операции умножения представлены в табл. 1.6, а для операции деления – в табл. 1.7.

Если результат по размеру совпадает с размером сомножителей, то флаги CF и OF после завершения операции раны нулю, в противном случае – устанавливаются в единицу. Это значит, что результат вышел за пределы младшей части произведения и состоит из двух частей, что необходимо учитывать при дальнейшей работе. Остальные флаги не определены.

Таблица 1.6

Расположение операндов при умножении

Первый сомножитель Второй сомножитель Результат
Байт AL 16 битов в AX; AL – младшая часть результата, AH – старшая часть результата (AX) (SRC) * (AL)
Слово AX 32 бита в паре DX: AX; AX – младшая часть результата, DX – старшая часть результата (DX:AX) (SRC) * (AX)

Как следует из табл. 1.6, при умножении однобайтовых значений первый сомножитель указывается в самой команде, второй должен быть помещён в регистр AL, а произведение после выполнения команды умножения помещается в регистр AX. Процесс умножения двухбайтовых сомножителей аналогичен, за исключением того, что второй сомножитель должен быть помещён в регистр AX, а произведение сохраняется по частям в двух регистрах: DX и AX.

Пример:

mov al,5; Переслать в регистр al  десятичное значение 5

mov bh,4; Переслать в регистр bh  десятичное значение 4

mul bh; Умножить содержимое регистра al на bh

mov cx,ax; Переписать значение произведения из регистра ax в c x

Таблица 1.7

Расположение операндов при делении

Делимое Делитель Частное Остаток
Слово (16 бит) в регистре AX Байт Байт в регистре AL (AL) (AX)/ (SRC) Байт в регистре AH (AH) (AX)/ (SRC)
Двойное слово (32 бита), в DX – старшая часть, в AX – младшая часть Слово Слово в регистре AX (AX) (DX:AX)/ (SRC) Слово в регистре DX (DX) (DX:AX)/ (SRC)

Делитель может находиться в регистре или в памяти и иметь размер 8 или 16 битов. Местонахождение делимого фиксировано: если делитель имеет размер 1 байт, то делимое должно помещаться в регистр AX; если делитель является двухбайтовым, то старшие два байта делимого должны размещаться в регистре DX, а младшие два байта – в регистре AX. Результатом команды деления являются частное и остаток от деления, которые также размещаются в строго определённых регистрах (табл. 1.7).

После выполнения операции деления содержимое флагов не определено, но возможно возникновение исключения с номером ноль (так называемое «деление на ноль») в случаях, когда делитель равен нулю или частное не входит в отведенную для него разрядную сетку.

Пример:

mov ax,20; Переслать в регистр ax десятичное значение 20

mov bh,4; Переслать в регистр bh  десятичное значение 4

neg bh; Изменить знак числа, хранящегося в регистре bh

idiv bh; Разделить с учётом знака содержимое регистра a х на bh

mov cl,al; Переписать остаток из регистра al в регистр cl

mov ch,ah; Переписать остаток из регистра ah в регистр ch

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

Логические команды выполняют логические операции над битами операндов. Размерность операндов должна быть одинакова.

Логические команды наиболее часто используются для селективных (выборочных) установок, инвертирования, сброса или проверки битов в операнде - получателе в соответствии с двоичным значением операнда - источника. Такие действия часто встречаются в операциях над битами регистров и данных ввода-вывода. При этом операнд - источник называют маской, а сама операция называется маскированием. Описание логических команд представлено в табл. 1.8.

Команда логического сравнения TEST выполняет операцию логического умножения над операндами; при этом сами операнды не изменяются. Результат операции формируется во временной памяти: бит результата равен 1, если соответствующие биты операндов равны 1, в противном случае бит результата равен 0.

Команда NOT не воздействует на флажки. Остальные команды сбрасывают OF и CF, оставляют АF не определенным и устанавливают СF, Z F, PF по обычным правилам.

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

Таблица 1.8

Формат логических команд

Название команды Мнемоника и формат команды Описание действия
Инвертировать NOT OPR (OPR)not OPR Инвертирование всех битов операнда
Объединить по «ИЛИ» OR DST,SRC (DST)(DST) or (SRC) Выполнение операции логического «ИЛИ» над соответствующими парами битов источника и приёмника
Объединить по «И» AND DST,SRC (DST)(DST) and (SRC) Выполнение операции логического «И» над соответствующими парами битов источника и приёмника
Сложить по MOD2 («исключающее ИЛИ») XOR DST,SRC (DST)(DST) xor (SRC) Выполнение операции «Исключающее ИЛИ» над соответствующими парами битов источника и приёмника
Проверить TEST OPR1,OPR2 OPR1 and OPR2 Выполнение операции логического сравнения над соответствующими парами битов двух операндов

Примеры:

mov al,01001101b; Переслать в регистр al двоичное

;значение 01001101 b

not al; Инвертировать биты содержимое регистра al

or al, 10000001b; Установить нулевой и седьмой биты

; в регистре al в 1

and al, 11110101b; Сбросить первый и третий биты в содержимом

; регистра al

test al, 00000001b; Проверить, является ли содержимое регистра al

                        ; нечётным числом (нулевой бит должен быть 1)

jnz m1; Выполнить переход на команду с адресом m 1, если нулевой

     ; бит содержимого регистра al равен 1 (число нечётное)

     ; В этом случае результат команды test равен 1 и значение

     ; флага zf равно 0



Поделиться:


Последнее изменение этой страницы: 2020-12-09; просмотров: 123; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.39.32 (0.009 с.)