Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КПиЯП(Шпоры).doc
Скачиваний:
18
Добавлен:
11.05.2015
Размер:
294.4 Кб
Скачать

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

6. Стандартные директивы определения сегментов.

Директива SEGMENT используется для описания сегментов. Формат директивы: <имя>SEGMENT[параметры]…<имя> ENDS. Данная директива может содержать три типа параметров: выравнивание; объединение; класс. 1. Выравнивание – определяет границу памяти для стартового адреса сегмента: byte – на границе байта word – на гр. слово dword – на гр. двойное слово para – на гр. параграфа page – 256 байт. По умолчанию используется знач. PARA. 2. Объединение – показывает как должны объединятся сегменты с одинаковыми именами в разных модулях. Возможны сл. типы объединений: COMMON – для сегментов с одним и тем же именем и классом и имеющим параметр объединения common устанавл. один общий адрес загрузки(размер сегмента – максимальный из совм. сегментов.) Это позволяет: - уменьшить объем памяти исп. программой; - к одним и тем же данным можно обращаться с исп. разных имен; - к одним и тем же данным получ. разл. способ доступа(byte, word, dword и т.п.), PUBLIC – сегменты с одним и тем же именем, классов и топом объединения public загружаются в смежные блоки памяти (объед.) и размер всего сегмента равен сумме размеров объединенных сегментов. Требуется когда несколько разр. создают общий сегмент данных к которому необходим доступ из различных программных модулей., MEMORY – тип объединение подобный PUBLIC, STACK – все сегменты с одинаковым именем, классом и типом объединения stack компонуются в один общий сегмент, аналогично сегментам с типом public(различие в том что сегмент с типом компоновки stack и классом ‘stack’ считается сегментом стека. , AT-выражение – выражение определяет сегментный адрес памяти, т.е. задает номер параграфа с которого в памяти будет распологаться данный сегмент., PRIVATE – данный сегмент не будет объединяться с другими. Этот тип компановки модулей устанавливается по умолчанию.

MOD1

D1 SEGMENT COMMON

a dd 9

b dw 7

D1 ENDS

;MOD2

D1 SEGMENT COMMON

k db 5

z db 2

D1 ENDS

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

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

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

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

NAME_TEXT. .stack размер

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

.data

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

.data?

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

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

.const

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

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

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

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