Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Команды умножения - MUL, IMUL






Команда MUL (multiply-умножить) умножает числа без знака, a IMUL (integer multiply-умно­жить) умножает целые числа со знаком. Множимое и множитель у обеих команд должны быть данные одного типа, то есть байты, слова, двойные слова и т. д.

Эти команды имеют следующий формат:

MUL источник; Где источник - регистр общего назначения,

IMUL источник; или ячейка памяти размером в байт или слово.

В качестве первого операнда (множимого), команды MUL и IMUL используют содер­жимое регистра AL (при операциях над байтами) или регистра АХ (при операциях над словами). Произведение имеет двойной размер и возвращается следующим образом:

– умножение байтов -возвращает 16-битовое произведение в регистры АН (старший байт) и AL (младший байт);

– умножение слов -возвращает 32- битовое произведение в регистры DX (старшее слово) и АХ (младшее слово).

То есть размер произведения n - битных сомножителей равен 2n.

После исполнения команды MUL флаги CF и OF равны 0, если старшая половина произведения равна 0; в противном случае оба этих флага равны 1. После исполнения команды IMUL флаги CF и OF равны 0, если старшая половина произведения представляет собой лишь расширение знака младшей половины. В противном случае они равны 1.

Несколько примеров умножения:

MUL BX; Умножить ВХ на АХ без знака.

MUL MEM_BYTE; Умножить содержимое ячейки памяти на AL без знака.

IMUL DL; Умножить DL на AL со знаком.

IMUL MEM_WORD; Умножить ячейку памяти на АХ со знаком.

Команды MUL и IMUL не дозволяют в качестве операнда использовать непосредственное число. Перед умножением непосредственное число необходимо загрузить в регистр или в ячейку памяти.

Например: MOV DX, 10; Непосредственное данное поместим в DX.

MUL DX; Умножаем содержимое регистра АХ на 10.

3.1.8 Команда увеличения значения приемника – INC

Команда INC (increment - прирастить) добавляет 1 к содержимому регистра или ячейки памяти, но в отличие от команды ADD не воздействует на флаг переноса CF. Команда INC удобна для приращения значений счетчиков в циклах команд. Ее можно использовать и для приращения значения индексного регистра или указателя при доступе к последовательно расположенным ячейкам памяти. Например:

INC CX; Увеличить значение 16-битового

INC AL; или 8-битового регистра на единицу.

INC MEM_BYTE; Увеличить значение байта

WORD[BX]; или слова памяти на единицу.

Не допускается использовать в качестве операнда непосредственное значение. Операнд интерпретируется как число без знака.

 

3.1.9 Команда программного прерывания – INT

Команда INT инициирует в процессоре процедуру прерывания, в результате которой управление передается программе обработки прерывания с номером n. Этот номер указан в качестве операнда команды INT. Прерывания могут быть инициированы также и внешними устройствами системы. В зависимости от источника, прерывания продразделяются на аппаратные и программые, но поцедуры обработки прерываний выполняются по одному алгоритму. Микропроцессор 8086 обрабатывает три различные команды прерывания - две команды вызова и одну команду возврата.

Команда INT (interrupt - прерывать) имеет следующий формат:

INT тип_прерывания; Где тип_ прерывания это номер, идентифицирующий один из 256 различных векто­ров, находящихся в памяти (вектор-это четырехбайтная область памяти). Таким образом, каждому из 256 прерываний соответствует один вектор, где хранятся IP и CS программы обработки прерывания. При исполнении команды INT микропроцессор производит следующие действия:

1. помещает в стек содержимое регистра флагов;

2. помещает в стек значение регистра CS;

3. помещает в стек значение регистра IP;

4. обнуляет флаг трассировки TF и флаг включения-выключения прерываний IF для исключения пошагового режима исполнения команд и блокировки других маскируемых прерываний;

5. умножая тип_ прерывания на 4, вычисляет адрес вектора прерывания;

6. загружает из памяти второе слово вектора прерывания в регистр CS;

7. загружает из памяти первое слово вектора прерывания в регистр IP;

8. устанавливает флаги IF и TF.

Итак, после исполнения команды INT в стеке окажутся значения регистра флагов и регистров CS и IP, флаги TF и IF будут равны 0, а регистры CS: IP указывают на начальный адрес программы обработки прерывания.

Все 256 векторов прерывания размещаются в области памяти с младшими адресами. Так как каждый из них имеет длину 4 байта, то они занимают первые 1К байтов, т.е. область памяти с абсолютными адресами от 0до 3FFH. Например, команда INT 21Н заставит микропроцессор 8086 вычислить адрес вектора 54Н (4 × 21Н). Следовательно, он получит 16-битовые значения регистров IP и CS, отвечающие программе обработки прерывания, из ячеек 54Н и 56Н соответственно. Из 256 типов прерываний фирма Intel зарезервировала первые 5 (от 0 до 4) для внутренних прерываний. Вызванная программа анализирует содержимое регистров Al, AH, DX, определяет вид вызываемой функции и осуществляет передачу управления этой функции. В IBM PC многие другие типы прерываний зарезервированы для нужд основной системы ввода-вывода (BIOS), а также для операционной системы DOS.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.