Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции ЭВМ СиС. 2012-2013.doc
Скачиваний:
31
Добавлен:
01.03.2025
Размер:
8 Мб
Скачать
☆

29.10.2012 — Лекция №12

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

LEA BX, MT

MOV AX,[BX] ; косвенная адресация

С помощью косвенной адресации м/о обращаться к элементам массива в циклическом режиме, т.е. с изменением содержимого BX внутри цикла программы

INC BX

MOV CX, [BX]

MT: DW ?,?

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

LEA BX, MT

LEA SI, 2

MOV AX [SI][BX], AX=25h

Адрес в BX еще называют базовым адресом, он указывает на начало структуры, а содержание SI указывает смещение на начало элемента структуры, таким образом такой способ адресации называется базово-индексным. Если элемент структуры состоит из нескольких байтов или слов, то можно указать смещение внутри элемента MOV AX, [SI][BX]+2; всё в байтах. Базово-индексный способ адресации можно использовать для работы с двумерными массивами, а начало двумерного массива задается с помощью метки, автоматически прибавляет g.

MOV BX,4

MOV SI, 2

MOV AX, MT+[BX]+[SI]+2; (со смещением относительно начала таблицы)

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

And R/m, R/m /d8/d16,

1операнд 2 операнд

And – реализует побитовую операцию логического умножения, результат находится в левом операнде. Пример:

And al.bl

Al 01101011

Bl 00101010

Ст бит мл бит

00101010 ; результат 2А

Логическое умножение обычно используется для операций наложения маски (маскирование), например, необходимо выделить младшую тетраду содержимого And al, 0Fh, если подавить младшую тетраду 0F0h.

Команда логического сложения

Or R/m , R/m / d8/d16

Or al, bl ; al=2Ah

Or al, 0Fh; установка младшей тетрады в 1

Этой командой реализуется побитное логическое сложение содержимого указанных регистров

Al 01101011

Bl 00101010

01101011 - логическое сложение

Младшие биты устанавливаем в 1, старшие – неизменны. Принудительная установка отдельных битов указанного регистра в 1.

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

Xor R/m ; R/m /d8/d18 al 01101011

Xor al, bl ; al=0 + bl 00101010

Xor al, 0Fh 01000001

4 1h

Xor al, al ; al=0

Побитное логическое сложение по модулю 2 (побитное исключение или) – обычное побитное арифметическое сложение с учетом переносов. Основное назначение – для инвертирования определенных битов регистра. Второе назначение – установка в 0 указанного регистра. Третье – команда используется для сравнения 2х кодов на совпадение (если коды в al b bl равны, то al=0).

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

Команда not – команда побитового инвертирования указанного регистра или ячейки памяти

Not R/m

Команда сдвига содержимого регистра rol R/m (сдвинуть) – сдвиг указанного регистра или ячейки памяти (операнда) без учета переноса влево

Используется для сдвигов между тетрадами или для формирования флага переноса С , для последующей побитной обработки, например, для преобразования II кода в последовательный начиная со старших разрядов. Кроме того имеется возможность преобразовать эти команды со сдвигом по счетчику rol R/m, CL – будет сдвигать столько раз, сколько записано в CL/

Команда сдвига с учетом переноса

Rcl R/m, cl

Rcr R/m, cl

Команда сдвига с учетом переноса влево и вправо.

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

Имеются 2 логических сдвига.

Shl R/m, cl

Shr R/m, cl

Логический сдвиг влево и вправо

В освободившийся бит всегда записывается 0, эти команды используются сдвиг влево – для уменьшения без знакового числа на 2; сдвиг вправо – для деления числа на 2; в CF переносится остаток от деления на 2

Al 00001011 -11

00010110, sh

22 (16 и 6)

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

Sal R/m , cl

Sar R/m , cl

Арифметический сдвиг влево совпадает с логическим сдвигом влево, т.е. младший бит записывается нулями, старший освобождающийся бит (знак числа) сохраняется – эта команда предназначена для сдвига чисел со знаком.

Группа арифметических команд

Эти команды выполняют арифметические действия над командами

Add R/m , R,m /d8/d16 ; команда арифметического сложения с учетом переноса

Add al, bl

Арифметические команды – особые команды, могут влиять на любой бит регистра флагов. Если число больше чем 255 то происходит перенос в старший бит, устанавливается флаг CF

Adc R/m , R/m /d8/d16

Adc al, bl ; al=Bl+Al+CF

Adc – команда сложения с учетом переноса, т.е. эта команда используется для сложения старших байтов многобайтных чисел, младшие байты складываются без учета переноса. Таким образом можно складывать числа любой длины, начиная с младшего байта и распространять перенос, однако при этом уменьшается быстродействие, т.к. байты обрабатываются последовательно.

SUB R/m , R/m /d8/d6

Sub al, bl

Из левого операнда вычисляется содержимое правого операнда.