Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоргалки_все.docx
Скачиваний:
3
Добавлен:
24.09.2019
Размер:
59.71 Кб
Скачать

1. Архитектура персонального компьютера. Назначение регистров микропроцессора.

Реальный режим работы процессора.

Регистры процессора:

1) Регистры общего назначения

AX | AH | AL | , BX, CX, DX

SI, DI, BP, SP

2) Сегментные регистры

CS, DS, SS, ES, IP и Flags

Пусть в память загружен исполняемы модуль некоторой программы. Команды должны в установленном порядке считываться и исполнятся, при этом они манипулируют данными в памяти или регистрах. В памяти выделяется три сегмента: для кода, данных и стека. Для 8086 каждый сегмент <=64 Кб. 8086 адресовал 1 Мб, Для того что бы адресовать 1 Мб с 16 бит регистром выполняется: вся память делится на сегменты по 64 Кб, причём каждый сегмент начинается на границе 16 байт от начала памяти, каждый стартовый байт – параграф. Начальный адрес каждого сегмента хранится в начале сегментного регистра, без последнего ноля. Физический адрес некоторого элемента памяти определяется суммой заданной в начале сегментного регистра и смещением. Смещение может хранится в одном из регистров:

IP(для кода); BX,SI,DI(для сегмента данных);BP,SP(для стека).Значения предыдущих кроме IP можно изменять, имея ввиду что память имеет кольцевую организацию.

AX - применяется при работе с портами, умножении и делении, ВХ - содержать адрес в опер. памяти(смещение),СХ – в операциях повторения,DX – адреса портов ввода-вывода, исплюю в дел. и умн. с АХ. Все они позвл. обращ. независимо к старшей и младш. полов.

SI – смещение в сегментах данных. при строк окманд(строки источника в DS)DI - смещение в сегментах данных. при строк окманд(строки приёмника в ES)BP – адреса в памяти смещение стека SP – тоже что BP указ на текущую вершину стека. измен командами (push, pop,pushf,popf,cell,ret)Их испол для хрон данных если они не испол на прим.

IP-смещение в сегменте кода. СS-стартовый адрес кода.DS-стартовый сегмент данных. ES-стартовый сегмент данных дополнительных данных.SS- адрес сегмента стека, в BP,SP Flags- биты установ в 01 при определённых условиях. С – перенос. Р – чётность 1 если чётно. А – выполняет операцию в ВCD кодах Z- признак нуля.S- повторяет занмение стартового бита результата. Т- признак трассировки.I- разрешение прирывание на вход,D- признак направления для стека 1-уменьшает индекс адр, 0- наоборот.

2. Структура памяти и методы адресации. Способы адресации данных и переходов.

В памяти можно различать байты, слова, двойные слова и т.д. Слово – 2 рядом расположенных байта. Младший байт хранится по младшему адресу. Адресом слова является его младший байт.

Адреса объектов тоже можно различать в памяти виде 4 – байтных элементов – сегмент смещения. Причем слово с меньшим адресом – смещение, а с большим – сегмент.

Методы адресации: - адресация данных; - адресация переходов;

Методы адресации данных:

1. Непосредственная, при которой операнд длинной байт или слово является частью команды. Операнд помещается в посл. байты команды причем младший байт располагается по меньшему адресу --- mov ax,1234h

2. Прямая адресация, при которой смещение данного размером 16 бит явл. частью команды: mov ax,my_label

3. Регистровая адресация – операнд нах-ся в одном из регистров общего назначения или в одном из сегментных регистров, имя регистра определяется в самой команде ---- mov ax,bx

4. Косвенная регистровая адресация, при которой смещение данного размером 16 бит нах-ся в одном из регистров bx, si, di, bp: mov ax,[bx]; mov ax,cs:[bx] – используется префикс замены. Префикс замены не может исп-ся с IP и SP

5. Относительная косвенная регистровая адресация. Смещение данного размером 16 бит вычисл. как сумма смещения в команде размером 8 или 16 бит и знач. в одном из регистров. --- mov ax,[bx+10] – смещение данного в сегменте ds опр-ся суммой знач, кот. хр-ся в регистре bx и числа 10. mov ax,[bx]+10; mov ax,10[bx]

6. Базовая индексная адресация - смещение данного размером 16 бит опр-ся суммой знач. базового рег-ра (bx,bp), индексного рег-ра (si,di) и смещением в команде. --- mov ax, ax,my_array[bx][si]

7. Неявная адресация – адреса объектов задаются неявно кодом операций.

Методы адресации переходов:

1. Внутрисегментный прямой переход, где смещение очередной ком-ды в сегменте кода. Опр-ся суммированием в регистре ip значения со знач. смещения в 8 или 16 бит заданным в команде --- jmp my_label

2. Внутрисегментный косвенный переход - содержимое регистра ip заменяется 16 битовым значением заданного регистра или адресации данных кроме непосредственных. --- jmp [bx]Межсегментный прямой переход – сод-мое регистра в ip и cs зам-ся 2 словами расп-ся непосредственно в команде ---- jmp far ptr far label

3. Межсегментный косвенный переход – при этом сод-мое регистров ip,cs зам-ся 2 словами последовательно расп. в памяти (ip по младшему алресу). --- jmp dword ptr[bx]

3.Сегментная организация памяти. Понятие физического и логического адреса.

При работе с сементными моделями памяти адрес представляет собой 2 числа:

1-е – адрес начала массива; 2-е – адрес байта внутри массива.

Пусть исполняемый модуль некоторой программы загружен в память ПК. Команды модуля считываются в микропроцессор и выполняются. При этом они используют данные, которые выбираются из памяти и регистров микропроцессора. Поскольку для адресации памяти микропроцессора 8086 используются 16-ти разрядные регистры, то это обеспечивает ему доступ к 65535 байтам.

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

Физ. Адрес некоторого элемента в памяти определяется суммой значения заданного в сегментном регистре со значением, которое называется смещением. Смещение определяет порядковый номер байта элемента от начала сегмента и может храниться в одном из след регистров:

IP – смещение кода программы;

BX, SI, DI – смещение для данных;

BP, SP – для стека.

Суммирование происходит следующим образом:

Микропроцессор расширяет содержимое сегмента регистра или базовый адрес, добавляя к нему справа 0. При этом адрес становиться 20-ти битным. И добавляет к младшим 16-ти битам значение смещения. Полученный 20-ти битный результат будет представлять собой физический или абсолютный адрес ячейки памяти.

Содержимое сегм. Регистра xxxx xxxx xxxx xxxx 0000 Полный адрес

+

Смещение xxxx xxxx xxxx xxxx

xxxx xxxx xxxx xxxx xxxx – абсолютный адрес.

CS:IP <- логический адрес

4. Объявление и инициализация данных.Псевдокоманды определения переменных

Псевдокоманды определения переменных указывают ассемблеру, что в соответствующем месте программы располагается переменная, определяют тип переменной (байт, слово, вещественное число и т.д.), задают ее начальное значение и ставят в соответствие переменной метку, которая будет использоваться для обращения к этим данным. Псевдокоманды определения данных записываются в общем виде следующим образом:имя_переменной d* значениегде D* — одна из нижеприведенных псевдокоманд:

DB — определить байт;

DW — определить слово (2 байта);

DD — определить двойное слово (4 байта);

DF — определить 6 байт (адрес в формате 16-битный селектор: 32-битное смещение);

DQ — определить учетверенное слово (8 байт);

DT — определить 10 байт (80-битные типы данных, используемые FPU).

Поле значения может содержать одно или несколько чисел, строк символов (взятых в одиночные или двойные кавычки), операторов ? и DUP, разделенных запятыми. Все установленные таким образом данные окажутся в выходном файле, а имя переменной будет соответствовать адресу первого из указанных значений.считает в регистр AL число 48h (код латинской буквы H).. Если нужно заполнить участок памяти повторяющимися данными, используется специальный оператор DUP, имеющий формат счетчик DUP (значение). Например, вот такое определение:

table_512w dw 512 dup(?)

создает массив из 512 неинициализированных слов, на первое из которых указывает переменная table_512w. В качестве аргумента в операторе DUP могут выступать несколько значений, разделенных запятыми, и даже дополнительные вложенные операторы DUP.

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

имя struc

поля

имя ends

где поля — любой набор псевдокоманд определения переменных или структур, устанавливает, но не инициализирует структуру данных. В дальнейшем для ее создания в памяти используют имя структуры как псевдокоманду:

метка имя <значения>

И наконец, для чтения или записи в элемент структуры используется оператор «.» (точка).

5. Использование логических и сдвиговых операций.

12) Логические и сдвиговые операции.

Логичиские операции: AND - Команда выполняет побитовое «логическое И» над приемником (регистр или переменная) и источником (число, регистр или переменная; источник и приемник не могут быть переменными одновременно) и помещает результат в приемник. OR - Выполняет побитовое «логическое ИЛИ» над приемником (регистр или переменная) и источником (число, регистр или переменная; источник и приемник не могут быть переменными одновременно) и помещает результат в приемник. XOR - Выполняет побитовое «логическое исключающее ИЛИ» над приемником (регистр или переменная) и источником (число, регистр или переменная; источник и приемник не могут быть переменными одновременно) и помещает результат в приемник.NOT - Каждый бит приемника (регистр или переменная), равный нулю, устанавливается в 1, и каждый бит, равный 1, сбрасывается в 0. Сдвиговые операции SAR - Арифметический сдвиг вправо. SAL - Арифметический сдвиг влево. SHR - Логический сдвиг вправо. SHL - Логический сдвиг влево. ROR - Циклический сдвиг вправо. ROL - Циклический сдвиг влево. RCR - Циклический сдвиг вправо через флаг переноса. RCL - Циклический сдвиг влево через флаг переноса.

mov al,10010001b

shl al,1 ;al=00100010b

sal al,1 ;al=01000100b

mov al,10100011

mov cl,3

shl al,cl ;al=00011000b

7. Упрощенные директивы определения сегментов.

После того как модель памяти установлена, вступают в силу упрощенные директивы определения сегментов, объединяющие действия директив SEGMENT и ASSUME. Кроме того, сегменты, объявленные упрощенными директивами, не требуется закрывать директивой ENDS — они закрываются автоматически, как только ассемблер обнаруживает новую директиву определения сегмента или конец программы.

Директива .CODE описывает основной сегмент кода

.code имя_сегмента

NAME_TEXT. .stack размер

Директива .STACK описывает сегмент стека. Необязательный параметр указывает размер стека. По умолчанию он равен 1 Кб.

.data

Описывает обычный сегмент данных

.data?

Описывает сегмент неинициализированных данных:

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

.const

Описывает сегмент неизменяемых данных.

.fardata имя_сегмента

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

8. Организация и использование стека.

Стек - нек. область оперативной памяти которая исп. механизм безадресной записи и выборки данных. Эти механизмы работают : последний запис. - первый выбранный. Адрес сегмента памяти в кот. нах. стек определ. в регистре ss. ЄAaВершина стека в sp. Для 16 бит. процессора данные в стек помещ. в виде слов. ss:sp - в любой момент определ. вершина. push - занести в стек. (sp уменьш на 2). Для извлечения слова из стека исп. команда типа pop, при этом снач. произв. чтение слова, а потом sp увелич на 2. Особенности: 1)Несмотря на то что знач. sp можно изменять, этого делать не следует, т.к. стек исп. довольно часто и не только самой программой(но и при вызове различных подпрограмм). ОП могут исп. стек при вызове сервисных процедур. 2) Необходимо обращ. внимание для выделения памяти для стека. Для адрес. данных стека можно исп. bp (можно рассматр. как базовый регистр в сегменте стека и находить данные в стеке через смещение заданные относит. этого регистра).

Оперативная память

Сегмент кода

Сегмент данных

Сегмент стека

Вершина стека

Дно стека

9. Структура программ типа .com и .exe.

Программа в формате ЕХЕ, созданная компоновщиком, состоит из следующих двух частей:

1) заголовка - записи, содержащей информацию по управлению и настройке программы;

2) собственно загрузочного модуля.

В заголовке находится информация о размере выполняемого модуля, области загрузки в памяти, адресе стека и относительных смещениях, которые должны заполнить машинные адреса в соответствии с относительными шестнадцатеричными позициями:

Заголовок имеет минимальный размер 512 байт и может быть больше , если программа содержит большое число настраиваемых элементов. Позиция 06 в заголовке указывает число элементов в выполняемом модуле, нуждающихся в настройке. Каждый элемент настройки в таблице, начинающейся в позиции 1С заголовка, состоит из 2-х байтовых величин смещений и 2-х байтовых сегментных значений. Система строит префикс программного сегмента (PSP) следом за резидентной частью COMMAND.COM, которая выполняет операцию загрузки.

Различия между программами в ЕХЕ и СОМ файлах:

- РАЗМЕР ПРОГРАММЫ. Программа в формате ЕХЕ может иметь любой размер, в то время как СОМ-файл ограничен размером одного сегмента и не превышает 64 К. Размер СОМ - файла всегда меньше, чем размер соответствующего ЕХЕ-файла; одна из причин этого - отсутствие в СОМ - файле 512-байтового заголовка ЕХЕ-файла.

- СЕГМЕНТ СТЕКА. В ЕХЕ-программе определяется сегмент стека, в то время как СОМ-программа генерирует стек автоматически. Таким образом, при создании ассемблерной программы, которая будет преобразована в СОМ - файл, стек должен быть опущен.

- СЕГМЕНТ ДАННЫХ. В ЕХЕ-программе обычно определяется сегмент данных, а регистр DS инициализируется адресом этого сегмента. В СОМ-программе все данные должны быть определены в сегменте кода.

- ИНИЦИАЛИЗАЦИЯ. В ЕХЕ-программе выполняется инициализация регистра DS. Так как в СОМ-программе стек и сегмент данных не определены, то эти шаги отсутствуют. Когда СОМ-программа начинает работать, все сегментные регистры содержат адрес PSP - 256 байтовый блок, который резервируется операционной системой DOS непосредственно перед СОМ- или ЕХЕ-программой в памяти.

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