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

2. Команды умножения (mul, imul)

MUL <операнд> - умножает значение в регистре AL или AX на значение операнда <операнда>. Множимые числа должны быть одного типа, т.е. либо байт умножается на байт, либо слово умножается на слово. В первом случае произведение помещается в AX во втором в регистровую пару DX,AX.

Покажем фрагмент программы, реализующей умножение двух чисел. Первое число размером в 2 слова, а размер второго – слово.

AAM - Команда коррекции умножения чисел , представленных в ASCI формате. Перед перемножением необходимо избавиться от троек, т.е. представить код в распакованном десятичном формате. Команда коррекции умножения AAM выполняет корректировку результата умножения в регистре AX. Содержимое регистра делится на 10, результат помещается в AH а остаток в AL.

IMUL <операнд> - умножает значение в регистре AL или AX на значение <операнд>. Используется для умножения чисел с учетом их знака.

22) Арифметические команды: вычитание и деление двоичных и двоично-десятичных чисел.

Вычитание:

SUB Вычитание операндов

SBB Вычитание операндов и признака СF (заем)

DЕС Декремент операнда

СМР Сравнение операндов

NEG Изменение знака операнда

AAS АSCII-коррекция результата вычитания

DAS Десятичная коррекция результата вычитания

Деление:

DIV Беззнаковое деление

IDIV Знаковое (целочисленное) деление

AAD ASCII-коррекция результата деления

Команды вычитания

SUB <приемник>, <источник> вычитает содержимое источника из приемника, результат помещает в приемник. Действие: <приемник> = <приемник> - <источник>.

SBB <приемник> - <источник> - вычитание с заемом. Используется при вычитании длинных чисел. Действие: <приемник> = <приемник> - <источник> CF .

DAS - коррекция вычитания упакованных двоично-десятичных чисел.

Правило действия команды DAS: если в результате операции вычитания значение 4-х младших бит регистра AL>9, то из AL вычитается 6.

Например, необходимо вычислить разницу 55 - 26 (=29)

Пусть содержимое регистров AL=55h и BL=-26h

SUB AL, BL ; получим значение AL = 2Fh

DAS ; после коррекции AL = 29h

Проверьте действие команд с помощью AFDPRO.

Первая команда даст в результате число 2Fh. Так как полученное число значение младшей тетрады > 9, то команда DAS вычтет из результата число 6.

00101111 2Fh

+11111010 (-6 )

=00101001 (29h) получим окончательный результат 29h.

AAS - коррекция вычитания неупакованных десятичных чисел. Правило действия команды AAS:

если в регистре AL в результате операции вычитания значение 4 младших бита результата >9, то из AL вычитается 6.

CMP <приемник>, <источник> - команда сравнения аналогична команде вычитания,

но результат не запоминается. Результат отображается в состоянии флагов.

NEG <операнд> изменяет знак операнда.

Команды деления ( DIV, IDIV)

Делимое должно быть двойным по размерности типом данных по сравнению с делителем. Размер частного и остатка должен быть равен делителю. Если делитель равен 0 или частное не помещается в назначенный регистр, то операционная система реагирует на подобную ситуацию и выбирает тип ошибки “деление на ноль”.

Если делим на слово, то делимое размещается в регистрах DX, AX. Частное размещается в AX, а остаток в DX. Если делим на байт, то делимое размещается в регистре AX, частное размещается в AL, а остаток в AH. Нельзя делить на непосредственное число.

Формат команды:

DIV BL (AL = AX/BL )

DIV BX (AX= <DX,AX>/BX )

DIV MEMW (AX= <DX,AX>/MEMW )

SBW- преобразование байта в слово.

SBD- преобразование слова в двойное слово.

Деление в ASCI кодах.

AAD - Команда коррекции деления в неупакованной форме.

Команда коррекции деления AAD выполняется до непосредственного деления. Предварительно слова переводятся в распакованный десятичный формат. Содержимое AH умножается на 10 и прибавляется к содержимому AL, то есть получается двоичный код.

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