Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лр_1_ЭВМ и ПУ.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
238.08 Кб
Скачать

2.1.3 Использование команд neg и cmp

При выполнении команды neg процессор вычитает соответствующее значение из 0. Это значение может быть записано в регистр или память. При вычитании значения из 0 получается дополнительный код числа, что эквивалентно изменению всех нулей на единицы, единиц на нули и прибавлением 1.

neg ax ; Получение двоичного дополнения ax

neg [value] ; Получение двоичного дополнения [value]

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

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

Для правильного умножения и деления требуется помещать значения в соответствующие регистры. После операции необходимо правильно извлекать ответ. Для наглядности, запустите программу 2.2 в Turbo Debuger и понаблюдайте за работой команд mul, imul, div и idiv. Для ассемблирования, компоновки программы и загрузки в Turbo Debuger выполните следующие команды:

Программа 2.2. Muldiv.Asm

%TITLE

«Использование

команд mul,

div, imul, idiv»

IDEAL

MODEL

small

STACK

256

DATASEG

exCode

DB

0

opByte

DB

8

opWord

DW

100

sourceB

DB

64

sourceW

DW

4000

CODESEG

Start:

mov

ax, @data

;Установить DOS адрес

mov

ds, ax

; сегмента данных

mov

al, [opByte]

mul

[sourcB]

;axal*[sourceb]

mov

ax, [opword]

mul

[sourceW]

; ax, dxax*[sourceW]

mov

ax, [opWord]

mul

ax

;ax, dxax*ax

mov

ax, [opWord]

div

[sourceB]

;alax div [sourceB]

mov

ax, [opWord]

mov

dx,[opWord]

div

[sourceW]

;axax, dx div [sourceW]

Exit:

mov

ah, 04Ch

;Ф-ция DOS/ Выход из ;программы

mov

al, [exCode]

;Возврат значения кода ;ошибки

int

21h

;Вызов DOS. Останов ;программы

END

Start

;Конец программы/точка ;выхода

При выполнении беззнакового умножения и деления необходимо использовать определенные регистры и иметь ввиду, что 32-битовый результат и операнды записываются в два регистра—dx и ax. Операнд-источник для команды mul и div может располагаться в памяти либо в любом другом регистре общего назначения. Так как размер операнда-источника определяет размер результата, то случайное перемножение вместо байтовых переменных, переменных длиной в слово вызовет изменение регистра dx.