Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ассемблер.doc
Скачиваний:
14
Добавлен:
30.04.2019
Размер:
120.32 Кб
Скачать

6. Режим адресации. Загрузка адреса в регистр. Директива offset. Обращение к массиву байт и массиву слов. Индексация в 2-х мерном массиве.

Прямая адресация определена как часть памяти Mov ах, [5] при данной адресации адрес передается прямо, т.е. указывается адрес (например, 5h), регистровая адресация значение находится в регистрах Mov ах, bх . Базовая адресация указывает базовый регистр плюс смещение Mov ах, (Bx+5). Индексная использует индексные регистры Mov ах, [si+5], косвенная адресация в одном из РОН находится не значение, а адрес по которому считывается значение Mov ах, [bx], непосредственная адресация Mov ах, 5

значение передается в регистр непосредственно. Базово-индексная адресация в качестве адреса используется базовый регистр, индексный регистр и смещение. Применяется для адресации двумерных массивов Mov ах, [var+bx+si].

Загрузка адреса используется командой lea (например, lea ах.dх). Команда вычисляет исполнительный адрес операнда и записывает его в регистр в качестве 1-го операнда может быть любой РОН. lea аналог mov, но есть различия. Если lea записывает в регистр сам адрес указанный в команде, то mov записывает содержание ячейки с этим адресом. Имена переменных и метки рассматривается как адрес выражения, Offset - для определения смещения адреса некоторой переменной. В качестве выражения можно использовать имя переменной или некоторое выражение. Выражение является полезным, если необходимо обеспечить доступ к некоторой области, расположенной до или после переменной, или к части сложной переменной. Описание массива

Mаs dd 1,2,3,4,5_____Маs dv 5 dup (0) - массив нулевых символов.

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

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

Используя режим адресации можно организовать эффективную работу с массивом в памяти, индексация адресации со смещением, адрес формируется из 2-х компонент: постоянного указателя прямого адреса

массива, обозначаемого начальный массив, и переменного (индексного) указатель имени индексного регистра. Mov si,4___mov ах,mas[si]

Обращение к массивам: Команда LODS (LODSB или LODSW) в зависимости от размера операндов) передает байт или слово, расположенное по адресу ds:si в АХ или АL, а также инкрементирует или декрементирует si (в зависимости от состояния признака направления DF), чтобы указатель переместился на следующий элемент. Команда MOVS (MOVSВ или MOVSW в зависимости от размера операндов) пересылает байт или слово, расположенное по адресу ds:si, по адресу es:di. После пересылки si и di

инкрементируются (если признак направления сброшен) или декрементируются (если признак направления установлен),чтобы указатель переместился на следующий элемент строки. Команды обработки массивов используются с префиксами повторения: RЕР, RЕРЕ, RЕРZ - Повтор пока CS<>0 и ZF=1; RЕРNЕ, RЕРNZ – Повторять пока СS<>0 и ZF=0.

Базовая индексная адресация со смещением формируется из 3-х компонентов. Постоянного (необязательно) - прямой адресации массива в виде имени идентификатора, обозначает начало массива или непосредственное значение. Переменный (базовый) - указатель имени базового регистра.

7. Система формат команд. Общее представление о машиной команде. Количество назначений байт в машинной команде. Описание битовых полей в машинной команде. Состав, назначение полей пост-байта режима адресации. Тип адресации МП «регистр - память».

Система команд состоит из 135 команд и занимает от 1 до 6 байт, в команде может быть 0 (например,std) ,1(int 1h),2 операнда (mov ах,bх).

Формат команд:

Префикс | перекрытие сегмента | коп в w| mod reg pm(регистр или память)

Displ. DisplH. Data H. (все в одну строку некоторые могут не присутствовать в команде в зависимости от команды). Префикс проверяет получившийся результат предыдущей команды и в зависимости от полученного результата выполняет следующие действия : передача выполнения другой команде или повтор предыдущей, т.е. префикс позволяет сделать цикл (repz выполняется цикл пока равно нулю, repnz выполняется пока не равно нулю и т.д.)

Префикс назначение модифицировать операцию, выполняемую командой. Бывают префиксы замены сегмента, префиксы разрядности адреса, префиксы разрядности операнда, префиксы повторений.

Перекрытие сегмента служит, чтобы изменить сегмент используемый по умолчанию (лучше об этом умолчать, если что потом сказать не помешает). КОП - код операции, определяет действие команды. Бит d указывает направление передачи если 1 то в МП, 0 из МП. Бит w определяет размер операнда 1 - слово, 0 - байт. Участвующие в операции регистры, ячейки памяти, идентифицируются пост байтом. Режим доступа к операнду указывает на типы и размеры операнда.

Поле RЕG - определяет операнд находящийся в регистре. Поле mod и R/М указывает используемые режимы адресации либо используемые регистры. Если mod = 11 оба операнда находятся в регистрах общего назначения в остальных случаях смещение. 00 - смещение отсутствует, 01 - 1 байт displ-, 10-2байта dispL, dispH.

Формат регистр - память Коп d w mod reg mem adr(адрес ячейки памяти)

Операции red=reg + sddr addr = addr*reg

W - размер операнда d - бит направления, mod - определяет сколько килобайтов занимает операнд-адрес mem - способов модификации.

8. Формат команд и режимов адресацию Способы указания обращения к памяти прямого и непосредственного операндов. Формат 2-оператдиой команды. 1-операндной команды,сокращенные, специальные форматы команд, префикс замены сегмента.

Команды могут иметь от 0 до 2 операндов. Операнд может быть указан в самой команде

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

При двухооперандной команде результат выполнения команды помещается в регистр или ячейку памяти, откуда берется один из операндов. Ор1=ор1+op2 ор1=ор1-ор2.

Форматы с двумя операндами.

1) 2 байта. Формат регистр-регистр. Моd=11 указывает регистр участвующий в операнде reg1 reg2 общего назначения. Коп - указывает операцию команды. W - разряд операндов d - бит направления или в МП или из МП.

Коп (6) d(1) w(1) mod (2) reg (3) reg(З) (указывается количество битов отведенных)

2) 2-4 байта. Формат регистр - память. Команды описывает операнд. Addr - адрес ячейки памяти. КОП (6) d(1) w(1) mod(2) reg(3 бит) r/m(3 бит) addr (0-2 байта).

Mod- 00 0 байт. 1 байт. 2 байта.

3) mod = 11. Регистр - непосредственный операнд (3-4 байта). КОП (6) s(1) w(1) mod (2) reg (3) reg (3) непосредственный операнд (1-2 байта). W - размер операндов, reg - регистр операндов. Непосредственный операнд может занимать 1 или 2 байта. Операнд размером в слово записывается в перевернутом виде.

Если непосредственный операнд задан байтом (S=1 и w=1), тогда передает выполнение операции байт автоматически расширяется в слово. S - какой тип данных.

4) Память непосредственный операнд коп s w 11 коп р/m адрес исполнительный операнд. Операция типа addr = addr*ор смысл полей тот же. Однооперандный формат - однооперандный int [bx] увеличиваемся на 1 ячейку по адресу bx. Коп (7) w(1) mod1 reg r/m dispL dispH.

Префикс замены.

Согласно принятой системе операнд может находится либо в сегменте стека либо в сегменте данных. Для того чтобы обращаться к произвольному сегменту используют префикс замены сегмента, т.к. во всех командах только один операнд располагается в памяти то возможно использовать только одного префикса замены. Префикс замены располагается перед первым байтом команды и распространяется только на одну команду. Seg (00 -es, 01- cs, 10- ss, 11-ds).

Сокращенные форматы команд используются в случаях часто используемых операций, например mov сх,5. Сокращенные форматы команд у каждого свои. Часто использует команды выделен свой КОП.