Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
I8086.DOC
Скачиваний:
50
Добавлен:
02.05.2014
Размер:
1.36 Mб
Скачать
      1. Das– коррекция вычитания двоично-десятичных упакованных чисел

2F

DAS

двоично-десятичная коррекция вычитания AL

Описание.Эта команда выполняет коррекцию результата вычитания двух двоично-кодированных десятичных чисел инструкциейSUBилиSBB.

Если при выполнении предшествовавшей операции вычитания в младшем полубайте регистра ALполучено значение, превышающее 9, или произошёл заём в 3-ий разряд (был установлен флажокAF), то значение младшего полубайта регистраALуменьшается на 6, флажокAFостаётся равным 1, а флажокCFустанавливается, если при вычитании 6 возник заём в 3-ий разряд (если заёма не было, значение флажкаCFне изменяется, т.е. остаётся таким же, каким оно было до выполнения инструкцииDAA). Если же содержимое младшего полубайта регистраALне превышает 9, а флажокAFсброшен, никаких действий с младшим полубайтом не выполняется.

Затем проверяется содержимое старшего полубайта регистра AL. Если его значение больше 9 либо если установлен флажокCF(независимо от того, был ли он установлен при выполнении команды сложения или при уменьшении младшего полубайта на 6 в процессе выполнения инструкцииDAS), то это значение уменьшается на 6 и устанавливается флажокCF. Если же значение старшего полубайта не превышает 9, а флажокCFсброшен, никаких действий со старшим полубайтом не выполняется.

ФлажкиAFиCFустанавливаются в соответствии с результатом операции (см. выше).

Флажки SF,ZFиPFустанавливаются по обычным правилам в соответствии с полученным результатом.

Значение флажка OFне определено.

      1. Dec– декремент

48+rw

DEC r16

декремент r16

FE /1

DEC r/m8

декремент r/m8

FF /1

DEC r/m16

декремент r/m16

Описание.Эта инструкция уменьшает значение своего операнда на единицу. Операндом может являться любой регистр общего назначения или одно- или двухбайтовое поле памяти.

ФлажкиOF,SF,ZF,AFиPFустанавливаются в соответствии с результатом по обычным правилам. Значение флажкаCFне изменяется.

Замечания по программированию

Декремент 16-разрядных регистров общего назначения может быть выполнен двумя видами инструкций – однобайтовой (код операции 48 плюс номер регистра) и двухбайтовой (код операции FF, номер регистра определяется байтомModRegR/M). Транслятор языка ассемблера автоматически генерирует однобайтовый код операции как более компактный; второй вариант при необходимости может быть запрограммирован вручную.

      1. Div– деление беззнаковое

F6 /6

DIV r/m8

AL:= AX DIV r/m8

AH:= AX MOD r/m8

F7 /6

DIV r/m16

AX:= DX, AX DIV r/m16

DX:= DX, AX MOD r/m16

Описание.Эта команда производит целочисленное деление двух беззнаковых двоичных чисел.

Делимое имеет размер 16 или 32 разряда. В первом случае оно располагается в регистре AX, во втором занимает регистровую паруDX:AX(старшая часть – в регистреDX, младшая – в регистреAX). Делитель размещается в регистре или ячейке памяти, определяемой байтомModRegR/M. При 16-разрядном делимом делитель имеет размер байт, а при 32-разрядном делимом – слово.

Частное и остаток имеют разрядность, совпадающую с разрядностью делителя, т.е. в два раза меньше, чем у делимого. В операции деления 16-разрядного числа на 8-разрядное частное располагается в регистре AL, остаток – в регистреAH. При делении 32-разрядного числа на 16-разрядное частное будет находиться в регистреAX, а остаток – в регистреDX.

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

Флажкине изменяются.