Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпаргалка по ОргЭвм.doc
Скачиваний:
120
Добавлен:
01.05.2014
Размер:
859.14 Кб
Скачать

6. Индексная адресация

si,di+ смещение, регистр сегментаds(es),movax,value[si]

7. Адресация по базе с индексированием и масштабированием

Это самая полная возможная схема адресации, в которую входят все случаи, рассмотренные ранее, как частные. Смещение может быть байтом или двойным словом. Если ESPили ЕВР используются в роли базового регистра, селектор сегмента операн­да берется по умолчанию из регистраSS, во всех остальных случаях -изDS.

Примечания:

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

Начиная с процессоров ix386, появились так называемые расширенные регистрыEAX,EBXи т.д. Их длина стала равной 32 битам и между ними нет жесткого закрепления по назначению (кромеEPBиEDX). Кроме того, начиная с процессоровix386, в адресных выражениях кроме смещения можно использовать масштабирование:

[EAX]*m+смещениеm=1,2,4,8

Индексированная адресация

mov di,ind

mov al,vec2[di]

mov cx,vec2[di]

Адресация с базированием и индексированием

mov bx,3

mov al,matr[bx][di]

mov cx,matr[bx][di]

mov ax,matr[bx*4][di]

12+13

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

(первая строка- имя поля команды, вторая- длина поля в байтах)

Префикс

Переопределе-ние сегмента

Код операции

Mod R/M

Адрес

Данные

0/1

0/1

1

0/1

0/1/2

0/1/2

Максимальная длина команды равна 6 байт.

Префикс - может задавать префикс повторения. В ассемблере обозначается как REP,REPE(повтор по равенству нулю),REPNE(повтор не по равенству нулю).

Переопределение сегмента- для жесткого определения регистра сегмента для режима адресации вместо принятого по умолчанию.

КОП- код операции определяет тип используемых данных (0- байт; 1- слово).

ModR/M- для задания режима адресации

Адрес содержит непосредственно адрес памяти.

Данные включает непосредственно операнды.

Режим адресации

Регистр

R/M

Mod

Reg

R/M

7 6

5 3

2 0

Исполнительный адрес = f{КОП,ModR/M, Адрес, Данные}

Все команды процессора i8086 можно разделить на группы:

  1. Команды передачи данных.

  2. Команды арифметических операций над целыми числами.

  3. Логические команды.

  4. Сдвиговые команды.

  5. Команды передачи управления.

  6. Команды прерываний.

  7. Команды управления флагами.

  8. Команды управления процессором.

  9. Команды плавающей арифметики.

  10. Команды мультимедийных расширений (ММХ).

  1. Команды передачи данных.

MOV приемник, источник;

8086, пересылка данных.

mov d, s ; (s)d

d- destination (приемник); s- source (источник)

XCHGоперанд1, операд2;

8086, обмен операторов между собой.

LEAприемник, источник;

8086, вычисление эффективного адреса.

leabx,MEM; эта команда аналогичнаmovbx,offsetMEM.

LDSприемник, источник;

8086, загрузить адрес, используя DS.

LESприемник,источник

8086, загрузить адрес, используя ES.

FAR:ldsсdsпо умолчанию

lesсesпо умолчанию

ldsbx,MEMаналогичнаmovbx,offsetMEM

mov ax, seg MEM

mov ds, ax

PUSHисточник;

8086, поместить данные в стек.

POPприемник;

8086, считать данные из стека.

INприемник, источник;

8086, считать данные из порта.

OUTприемник, источник;

8086, записать данные в порт

  1. Команды арифметических операций над целыми числами.

ADDприемник, источник;

8086, сложение.

addd,s;s+dd

ADCприемник, источник;

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

addd,s;s+d+CFd

SUBприемник, источник;

8086, вычитание.

subd,s;d-sd

SBBприемник, источник;

8086, вычитание с займом.

sbbd,s;d-s-CFd

СМРприемник, источник;

8086, сравнение.

cmpd,s;d-s

MULисточник;

8086, умножение чисел без знака.

mulbl;bl*alax

IMULисточник;

IMULприемник, источник;

IMULприемник, источник1, источник2;

8086, 80386, 80186, умножение чисел со знаком.

Процессор: 8086 80386 80186

DIVисточник;

8086, целочисленное деление без знака.

divbl; частное вal, остаток вah

IDIVисточник;

8086, целочисленное деление со знаком.

INCприемник;

8086, инкремент.

incd; (d)+1d

DECприемник;

80886, Декремент.

decd; (d)-1d

NEGприемник;

8086, изменение знака.

negs; -(s)s

  1. Логические команды.

ANDприемник, источник;

8086, логическое И.

ORприемник, источник;

8086, логическое ИЛИ.

XORприемник, источник;

8086, логическое исключающее ИЛИ.

NOTприемник;

8086, инверсия

TESTприемник, источник;

8086, логическое сравнение.

  1. Команды передачи управления

Делятся на команды безусловного и условных переходов.

Команда безусловного перехода

JMPоперанд;

JMP передает управление в другую точку программы. Операндом может быть непосред­ственный адрес для перехода, а также регистр или переменная, содержащая адрес.

В зависимости от типа перехода различают:

  • переход типа short(короткий переход) - если адрес перехода нахо­дится в пределах от -127 до +128 байт от командыJMP;

  • переход типа near(ближний переход) - если адрес перехода находит­ся в том же сегменте памяти, что и команда JMP;

  • переход типа far(дальний переход) - если адрес перехода находится в другом сегменте.

Команды условного перехода

Jccоперанд – Переход по адресу, задаваемому операндом если условие переходассудовлетворяется.

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

  1. Команды прерываний

INT/INTO - Вызов процедуры прерывания

|INT imm8 Прерывание, заданное непосредственным байтом

|INTO Прерывание 4 - Если флаг переполнения равен 1

Команда INT n программно генерирует вызов обработчика прерывания.

IRET - Возврат из прерывания

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

  1. команды управления флагами.

Установление и сброс флагов: CLC,STC;STD, СLD;CLI,STI.

Сохранение флагов в стеке: Pushf,popf

  1. команды управления состоянием процессора: HLT,Wait,Lock,Nop.

  2. Сдвиговые команды.

SARприемник, счетчик;

8086,арифметический сдвиг вправо.

SALприемник, счетчик;

8086, арифметический сдвиг влево.

SHRприемник, счетчик;

8086, логический сдвиг вправо.

SHLприемник, счетчик;

8086, логический сдвиг влево.

Эти четыре команды выполняют двоичный сдвиг приемника вправо или влево на значение счетчика (число или регистр CL, из которого учитываются только младшие пять бит, которые могут принимать значения от 0 до 31). Операция сдвига на 1 эквивалентна ум­ножению (сдвиг влево) или делению (сдвиг вправо) на 2. КомандыSALиSHLвыполняют одну и ту же операцию (на самом деле это одна и та же команда) - на каждый шаг сдвига старший бит заносится вCF,всебиты сдвигаются влево на одну позицию, и младший бит обнуляет­ся. КомандаSHRвыполняет прямо противоположную операцию: млад­ший бит заносится в CF, все биты сдвигаются на 1 вправо, старший бит обнуляется. Эта команда эквивалентна беззнаковому целочисленному делению на 2. КомандаSARдействует по аналогии с SHR, только стар­ший бит не обнуляется, а сохраняет предыдущее значение.SAR, таким образом, эквивалентна знаковому делению на 2, но, в отличие отIDIV, округление происходит не в сторону нуля, а в сторону отрицательной бесконечности.

RORприемник, счетчик;

8086, циклический сдвиг вправо.

ROLприемник, счетчик;

8086, циклический сдвиг влево

RCRприемник, счетчик;

8086, циклический сдвиг вправо через флаг переноса.

RCLприемник, счетчик;

8086, циклический сдвиг влево через флаг переноса.

Эти команды осуществляют циклический сдвиг приемника на число бит, указанное в счетчике (число или регистр CL, из которого учитываются только младшие пять бит, принимающие значения от 0 до 31). При выполнении циклического сдвига на 1 коман­дыROR(ROL) сдвигают каждый бит приемника вправо (влево) на одну позицию, за исключением самого младшего (старшего), который записывается в позицию самого старшего (младшего) бита. КомандыRCR,RCLвыполняют аналогичное действие, но включают флагCFв цикл, как если бы он был дополнительным битом в приемнике.

14

Существует три типа исполняемых файлов:

  • *.bat- задают порядок выполнения некоторой последовательности программ;

  • *.com- файлы исполняемых программ типаcom;

  • *.exe- файлы исполняемых программ типаexe.

*.com- для организации простых модулей (модели памятиtiny,small) длиной не более 64кб;

comфайл формируется в загрузочном виде и не требует настройки.

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

COM файл

64кб

Данные программы

SS:SP

100h  CS:IP

PSP

0

 DS, CS, ES, SS

PSP(Programsegmentprefix)- префикс сегмента программы, он содержит информацию для доступа программы к параметрам командной строки, к среде окружения, для реакции программы на критические ошибки и некоторые команды типаCtrl+C. В начальной частиPSPуказан адрес обработчика прерываний для возврата вDOS. Так какCSPSPи программа не может исполняться, начиная с этого адреса, первой командой делаютORG100 (100hIP).

EXE файл

SS:SP

Стек

SS:00

Данные

DS(сюда его необходимо установить)

Код

100hCS

PSP

DS(начальное положение)

Структура PSP

0h

DW

CD20вызов прерыванияDOSINT20 для завершения программы

2h

DW

Размер доступной для программы памяти в параграфах

2Ch

DW

Значение сегментного адреса среды окружения

80h

DTA–буферная область данных, адрес начала командной строки программы

0Eh

DD

Адрес обработки Ctrl Break

15

Ассемблер предназначен для написания программ, эффективных по времени и потреблению ресурсов. Обычно используется для написания относительно коротких программ или фрагментов программ на языках высокого уровня.

Особенностями ассемблера по сравнению с математическим языком являются:

  • символичные наименования операций и операндов;

  • отсутствие привязки к конкретным адресам памяти;

  • возможность специализации программ с помощью макросредств.

Дальнейшее изложение ориентировано на использование ассемблеров Intel80X86 –MASMиTASM.

Формат оператора ассемблера.

  1. метка: операция операнд(ы); комментарий

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

  1. имя директива операнд(ы); комментарий

Директива ассемблера; выполняется на этапе трансляции в объектный файл; команд не порождает.

Метка задает адрес данной команды в исполняемом файле или директивы в исходном тексте.

Операция – дейстие, выполняемое над операндами при выполнении программы.

Директива – действие над операндами при трансляции программы и генерации объектного файла.

Комментарий – пояснение к тексту программы, при трансляции не рассматривается.