Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура компьютеров / 6_Ассемблер-IA-32.doc
Скачиваний:
62
Добавлен:
20.03.2015
Размер:
593.92 Кб
Скачать

6.4.3. Программа упаковки цифр

В качестве простого примера использования указанных команд давайте рассмот­рим программу упаковки цифр. Код этой програм­мы для процессоров IA-32 вы видите на рис. 6.4. Два байта ASCII загружаются в регистры AL и BL Команда SHL сдвигает байт в регистре AL на четыре позиции влево, заполняя четыре освободившихся младших бита нулями. Посредством второго операнда этой команды задается количество разрядов, на которое должен быть сдвинут первый операнд. Команда AND очищает четыре старших бита вто­рого байта, записывая в них нули. После этого 4-разрядные значения, представ­ляющие BCD-коды чисел, объединяются командой OR в регистре AL, а затем со­храняются в памяти по адресу PACKED.

Рис. 6.4. Программа для процессоров IA-32, упаковывающая две цифры BCD в один байт

6.5. Другие команды

Мы рассмотрели лишь малую часть набора команд архитектуры IA-32. Еще не­сколько важных команд будут представлены ниже.

6.5.1. Вычитание

Команда SUB (вычитание), так же как и ADD выполняет вычитание байтов или слов, содержащих двоичные данные. Вычитание осуществляется в компьютере по методу сложения с двоичным дополнением: для второго операнда устанавливаются обратные значения битов и прибавляется 1, а затем происходит сложение с первым операндом. Во всем, кроме первого шага, операции сложения и вычитания идентичны.

Существует пять возможных комбинаций операндов: Примеры:

вычитание регистр – регистр SUB EAX,EBX;

вычитание память – регистр SUB NUMB,EBX;

вычитание регистр – память SUB EAX,NUMB;

вычитание регистр - непосредственное значение SUB EAX,100;

вычитание память - непосредственное значение SUB 100,EBX.

6.5.2. Команды умножения и деления

Кроме команд для сложения и вычитания целых чисел со знаком, описанных в разделе 5.5, в наборе команд IA-32 имеются команды для целочисленного ум­ножения и деления, а также для выполнения арифметических операций над чис­лами с плавающей запятой.

Имеются следующие команды умножения:

MUL – для умножения чисел без знака;

IMUL - для умножения чисел со знаком.

В общем случае в результате умножения двух 32-разрядных чисел получается произведение двойной длины, то есть 64-разрядное значение. Однако для многих приложений достаточно иметь результат одинарной длины, то есть 32-разрядное значение. В подобных ситуациях используются разные команды. Результат оди­нарной длины генерирует команда

Imul reg,src(исходный)

помещающая 32-разрядное значение результата в регистр общего назначения REG. Исход­ный операнд может находиться либо в регистре, либо в памяти.

В случае результата двойной длины команды

Imul src и mul src

используют в качестве второго операнда регистр AL, AX или ЕАХ, в зависимости от размера исходного операнда, располагающегося либо в регистре, либо в памяти. Произведение двойной длины по­мещается в два регистра: старшая половина разрядов результата сохраняется в ре­гистрах DH, DX или EDX, а младшая — в регистрax AL, AX или ЕАХ.

Команда для выполнения целочисленного деления имеет следующий формат:

Idiv src и div src

Выполняет целочисленное деление со знаком AL, АХ или ЕАХ (в зависимости от размера источника) на источник (регистр или переменная) и помещает результат в AL, АХ или ЕАХ, а остаток — в АН, DX или EDX соответственно. Результат всегда округляется в сторону нуля, знак остатка всегда совпадает со знаком делимого, абсолютное значение остатка всегда меньше абсолютного значения делителя.

Внимание.

В архитектуре IA-16 имеется отличие,

если размер src – байт, то делимое всегда должно быть AX, после выполнения команды частное находится в AL, а остаток в AH.

если размер src – слово (2 байта), то делимое всегда должно быть в паре регистров DX:AX (в AX – младшая часть делимого, а в DX – старшая часть) а, после выполнения команды частное находится в AX, а остаток в DX.

Числа с плавающей запятой имеют гораздо больший диапазон значений, чем целые числа, и исполь­зуются в первую очередь для научных вычислений. В архитектуре IA-32 приме­няется полный набор арифметических операций с такими числами. Их операнды и результаты располагаются в регистрах с плавающей запятой, показанных на рис. 5.12. Поддерживаются два формата чисел: с одинарной (32 разряда) и двой­ной (64 разряда) точностью.

Соседние файлы в папке Архитектура компьютеров