![](/user_photo/1334_ivfwg.png)
- •Принцип программного управления и машина фон Неймана
- •Понятие архитектуры, организации и реализации эвм
- •2 Многоуровневая организация эвм.
- •Понятие семантического разрыва между уровнями
- •3 Организация аппаратных средств эвм
- •Типовая структура вм на микропроцессорных наборах
- •Типовая структура процессора и основной памяти
- •Основной цикл работы процессора
- •Простейшая схема формирователя управляющих сигналов
- •Способы кодирования микрокоманд.
- •Арифметические особенности risc процессоров.
- •Организация стека процессора
- •1. Регистровая адресация
- •2. Непосредственная адресация
- •3. Прямая адресация
- •4. Косвенная адресация
- •5. Адресация по базе
- •6. Индексная адресация
- •7. Адресация по базе с индексированием и масштабированием
- •1. Директивы задания данных
- •2. Директивы сегментации программы
- •3. Директивы группирования.
- •4. Порядок размещения сегментов.
- •5. Директивы ограничения используемых команд.
- •6. Директива end.
- •Основные среды хранения информации.
- •Виды запоминающих устройств.
- •Постоянные запоминающие устройства.
- •Память с произвольной выборкой.
- •Иерархическая система памяти
- •Ассоциативные запоминающие устройства (азу)
- •Способы выполнения операции передачи данных
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 можно разделить на группы:
Команды передачи данных.
Команды арифметических операций над целыми числами.
Логические команды.
Сдвиговые команды.
Команды передачи управления.
Команды прерываний.
Команды управления флагами.
Команды управления процессором.
Команды плавающей арифметики.
Команды мультимедийных расширений (ММХ).
Команды передачи данных.
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, записать данные в порт
Команды арифметических операций над целыми числами.
ADDприемник, источник;
8086, сложение.
addd,s;s+dd
ADCприемник, источник;
8086, сложение с переносом
addd,s;s+d+CFd
SUBприемник, источник;
8086, вычитание.
subd,s;d-sd
SBBприемник, источник;
8086, вычитание с займом.
sbbd,s;d-s-CFd
СМРприемник, источник;
8086, сравнение.
cmpd,s;d-s
MULисточник;
8086, умножение чисел без знака.
mulbl;bl*alax
IMULисточник;
IMULприемник, источник;
IMULприемник, источник1, источник2;
8086, 80386, 80186, умножение чисел со знаком.
Процессор: 8086 80386 80186
DIVисточник;
8086, целочисленное деление без знака.
divbl; частное вal, остаток вah
IDIVисточник;
8086, целочисленное деление со знаком.
INCприемник;
8086, инкремент.
incd; (d)+1d
DECприемник;
80886, Декремент.
decd; (d)-1d
NEGприемник;
8086, изменение знака.
negs; -(s)s
Логические команды.
ANDприемник, источник;
8086, логическое И.
ORприемник, источник;
8086, логическое ИЛИ.
XORприемник, источник;
8086, логическое исключающее ИЛИ.
NOTприемник;
8086, инверсия
TESTприемник, источник;
8086, логическое сравнение.
Команды передачи управления
Делятся на команды безусловного и условных переходов.
Команда безусловного перехода
JMPоперанд;
JMP передает управление в другую точку программы. Операндом может быть непосредственный адрес для перехода, а также регистр или переменная, содержащая адрес.
В зависимости от типа перехода различают:
переход типа short(короткий переход) - если адрес перехода находится в пределах от -127 до +128 байт от командыJMP;
переход типа near(ближний переход) - если адрес перехода находится в том же сегменте памяти, что и команда JMP;
переход типа far(дальний переход) - если адрес перехода находится в другом сегменте.
Команды условного перехода
Jccоперанд – Переход по адресу, задаваемому операндом если условие переходассудовлетворяется.
Команды условного перехода (за исключением команды JCXZ) проверяют флаги, которые были установлены предыдущей командой.
Команды прерываний
INT/INTO - Вызов процедуры прерывания
|INT imm8 Прерывание, заданное непосредственным байтом
|INTO Прерывание 4 - Если флаг переполнения равен 1
Команда INT n программно генерирует вызов обработчика прерывания.
IRET - Возврат из прерывания
|Команда IRET извлекает из стека указатель команд, регистр CS и флаговый регистр, после чего возобновляет выполнение прерванной подпрограммы.
команды управления флагами.
Установление и сброс флагов: CLC,STC;STD, СLD;CLI,STI.
Сохранение флагов в стеке: Pushf,popf
команды управления состоянием процессора: HLT,Wait,Lock,Nop.
Сдвиговые команды.
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. Так какCSPSPи программа не может исполняться, начиная с этого адреса, первой командой делаютORG100 (100hIP).
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.
Формат оператора ассемблера.
метка: операция операнд(ы); комментарий
Имеем дело с командой, которая выполняется на этапе выполнения программы.
имя директива операнд(ы); комментарий
Директива ассемблера; выполняется на этапе трансляции в объектный файл; команд не порождает.
Метка задает адрес данной команды в исполняемом файле или директивы в исходном тексте.
Операция – дейстие, выполняемое над операндами при выполнении программы.
Директива – действие над операндами при трансляции программы и генерации объектного файла.
Комментарий – пояснение к тексту программы, при трансляции не рассматривается.