Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / lections-rtf / lect06.rtf
Скачиваний:
11
Добавлен:
16.04.2013
Размер:
155.45 Кб
Скачать

Адресные команды

Команда lea загружает эффективный адрес источника, т.е. его смещения относительно начала сегмента данных. Данная команда является альтернативой оператору ассемблера offset (смещение). В отличие от offset команда lea допускает индексацию операнда, что позволяет более гибко организовать адресацию операндов.

Пример 6.11. Загрузить в регистр bx адрес пятого элемента массива mas

.data

mas db 10 dup (0)

.code

...

mov di, 4

lea bx, mas[di]

;или

lea bx, mas[4]

;или

lea bx, mas+4

Команды lds/les/lgs/lfs/lss – загружают сегментный регистр ds / es / gs / fs / ss указателем из памяти. Например, команда lds di, pointer помещает в пару регистров ds:di адрес переменной pointer.

Арифметические команды

Группа арифметических команд представлена в табл. 6.2. Эта группа делится на четыре части:

Таблица 6.2. Арифметические команды.

Мнемокод / Операнды

Описание

Команды сложения

aaa

коррекция BCD-формата для сложения

adc назначение, источник

сложение с переносом

add назначение, источник

сложение байт или слов

daa

десятичная коррекция для сложения

inc назначение

инкремент

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

aas

коррекция BCD-формата для вычитания

cmp назначение, источник

сравнение

das

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

dec назначение

декремент

neg назначение

изменение знака числа

sbb назначение, источник

вычитание с учетом заема (флаг CF)

sub назначение, источник

вычитание

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

aam

коррекция BCD-формата для умножения

imul источник

умножение величин со знаком

mul источник

беззнаковое умножение

Команды деления

aad

коррекция BCD-формата для деления

cbw

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

cwd

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

div

беззнаковое деление

idiv

деление величин со знаком

Примеры команд сложения:

add dl, 5 ;dldl+5

add ah, bh ;ahah+bh

adc ah, bh ;ahah+bh+cf

inc ah ;ahah+1

Существует специальный вид представления числовой информации, в основу которой положен принцип кодирования каждой десятичной цифры числа группой из четырех бит. Этот вид называется двоично-десятичным кодом (BCD – Binary-Coded Decimal). Процессор может хранить BCD-числа в двух форматах: упакованном и неупакованном. В упакованном формате каждый байт может хранить числа в диапазоне от 00 до 99. В неупакованном формате в байт записываются числа в диапазоне от 0 до 9 (старшая тетрада байта всегда равна 0).

Пример 6.12. Сложение чисел. Результат BCD-число.

mov ah,08h ;ah=08h

mov al,05h ;al=05h

add al,ah ;al=al+ah=05h+08h=0dh (=13) – не BCD-число

xor ah,ah ;ah=0

aaa ;ah=1, al=3 – результат скорректирован

Пример 6.13. Сложение BCD-чисел.

mov al,69h ;69h — упакованное BCD-число

mov bl,74h ;74h — упакованное BCD-число

adc al,bl ;al=0ddh (=143)

daa ;cf=1, al=43h

jc m1 ;если перенос, то переход на ту ветвь программы, где он будет учтен:

Далее мы не будем рассматривать BCD-числа.

Примеры команд вычитания:

sub dl, 5 ;dldl-5

sub ah, bh ;ahah-bh

dec ah ;ahah-1

neg ah ;ah-ah (в ah помещается двоичное дополнение)

cmp ax, bx ;выполняется вычитание ax-bx, но результат в ax не изменяется)

Для умножения чисел без знака предназначена команда mul. Команда выполняет умножение двух операндов без учета знаков. Алгоритм зависит от формата операнда команды и требует явного указания местоположения только одного сомножителя, который может быть расположен в памяти или в регистре. Местоположение второго сомножителя фиксировано и зависит от размера первого сомножителя:

  • если операнд, указанный в команде — байт, то второй сомножитель должен располагаться в al;

  • если операнд, указанный в команде — слово, то второй сомножитель должен располагаться в ax;

Результат умножения помещается также в фиксированное место, определяемое размером сомножителей:

  • при умножении байтов результат помещается в ax;

  • при умножении слов результат помещается в пару dx:ax;

Пример 6.14. Умножение чисел

mn_1 db 15

mn_2 db 25

mov al, mn_1

mul mn_2 ;ax mn_1*mn_2

Соседние файлы в папке lections-rtf