Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_2011.doc
Скачиваний:
64
Добавлен:
09.12.2018
Размер:
1.15 Mб
Скачать

Xch ax, bx ; команда двунаправленного обмена

  1. Команды работы с адресами и указателями

lea <назначение>, <источник> - загрузка эффективного адреса в регистр общего назначения

Имя регистра назначения указывается в команде, в него записывается эффективный адрес.

Загрузка полного указателя в сегментный регистр и регистр общего назначения.

lds <назначение>, <источник>

les <назначение>, <источник>

lgs <назначение>, <источник>

lfs <назначение>, <источник>

lss <назначение>, <источник>

.

В команде загрузки полного указателя в качестве источника нельзя указывать непосредственно имя операнда в памяти. Предварительно необходимо записать значение полного указателя в некоторой области памяти, а затем указать в команде имя этой области.

Пример

.data

str db ‘Assembler’

:

.

full dd str ;выделяется 2 слова для записи полного адреса массива

:

.

les bx, full ; в регистры bx и es записан полный адрес переменной str

lea bx, str ; в регистр bx загрузить эффективный адрес str

  1. Команды сдвига

Команды сдвига обеспечивают манипуляции над отдельными битами операндов, в качестве которых могут быть регистры или ячейки памяти.

По принципу действия команды сдвига можно разделить на два типа:

  • команды линейного сдвига,

  • команды циклического сдвига.

Команды линейного сдвига

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

  • Очередной выдвигаемый из операнда бит устанавливает флаг CF.

  • Бит, входящий с другого конца операнда, имеет значение 0.

В свою очередь команды линейного сдвига делятся на два подтипа:

  • команды логического линейного сдвига,

  • команды арифметического линейного сдвига.

Команды логического линейного сдвига

shl операнд, счетчик_сдвигов – логический сдвиг влево. Содержимое операнда сдвигается влево на количество битов, определяемое значением счетчика сдвигов. Выдвигаемый влево из операнда бит становится значением флага переноса CF.

Флаг cf 7 6 5 4 3 2 1 0 Вход 0

shr операнд, счетчик_сдвигов– логический сдвиг вправо. Содержимое операнда сдвигается вправо на количество битов, определяемое значением счетчика сдвигов. Выдвигаемый вправо из операнда бит становится значением флага переноса CF.

Вход 0 7 6 5 4 3 2 1 0 Флаг cf

Пример использования логического сдвига для преобразования неупакованных BCD-чисел в упакованное BCD-число. Результат в регистре al.

………………..

bcd dw 0905h

………….. ah al

mov ax,bcd ; ax=0 9 0 5

shl ah,4 ; ax=9 0 0 5

add al,ah ; al= 9 5

Команды арифметического линейного сдвига

sal операнд, счетчик_сдвигов – арифметический сдвиг влево. Выдвигаемый слева бит становится значением флага переноса CF. Одновременно справа в операнд вдвигается нулевой бит. Результат выполнения команды на один шаг можно анализировать с помощью флага OF. По значению этого флага можно судить об изменении старшего (знакового) разряда операнда.

  • если OF = 0 то текущее значение флага CF и значение выдвигаемого слева бита операнда совпадают;

  • если OF = 1, то текущее значение флага CF и значение выдвигаемого бита операнда различные.

sar операнд, счетчик_сдвигов – арифметический сдвиг вправо. Команда восстанавливает знак операнда после очередного сдвига. Освободившиеся места заполняются значением знакового разряда.

Вход 0 7 6 5 4 3 2 1 0 Флаг cf

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

Пример

Умножение числа в операнде на 2.

mov ax, 01001011b ;число 75

sal ax,1 ;число10010110b (150)

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