Московский государственный открытый университет
Лекции по
Чебоксары 2006
Лекция 1.
АРХИТЕКТУРА ЦЕНТРАЛЬНОГО ПРОЦЕССОРА ПЭВМ
Основными аппаратными компонентами персональной ЭВМ являются:
- системный блок;
- клавиатура;
- монитор с дисплеем;
- накопители на магнитных дисках;
- принтер.
Кроме того, компьютер может быть укомплектован средствами асинхронной связи, графопостроителями, сканерами и т.п.
В системный блок входят:
- системная плата;
- блок питания;
- гнезда расширения для дополнительных плат.
Главным компонентом персонального компьютера ПК является центральный микропроцессор ЦП, который выполняет все операции обработки команд и данных. Центральный процессор ПК IBM и совместимых с ними может быть реализован на микросхемах фирмы Intel 8080, 8086, 80286 или 80386.
Центральный процессор может быть разделен на два логических блока (см. рис.1.1):
- блок исполнения EU;
- блок итерфейса шин BIU.
Итерфейс - это совокупность средств, обеспечивающих сопря- (interface) жение устройств и программных модулей
|
|
как на физическом, так и на логическом уровнях. Иногда этот термин употребляют так же и для характеристики средств доступа пользователя к вычислительной системе - "интерфейс пользователя". Интерфейс состоит из нескольких контроллеров ввода/вывода, каждый из которых может содержать в себе одну или более микросхем СБИС (Chips).
EU:Execution Unit | BIU:Bus Interface Unit
--------------- |
| AH | AL | |
--------------- |
| BH | BL | |
--------------- | Program Control
| CH | CL | |
--------------- | ---------------
| DH | DL | | | CS |
--------------- | ---------------
| SP | | | DS |
--------------- | ---------------
| BP | | | SS |
--------------- | ---------------
| SI | | | ES |
--------------- | ---------------
| DI | | | -----------
--------------- | | | Bus | Bus
|
|
-------------------------------------------- Control ------ | | | | Unit |
| | | -----------
------------------ | |
| ALU:Arithmetic | | |
| and Logic Unit | | |
------------------ | |
--->|CU:Control Unit | | |
| ------------------ | ---------------
| | Flags Register | | ------ 1 | Instruction
| ------------------ | | --------------- Queue
| | | | | 2 | (Six Bytes)
| | ---------- ---------------
| | | | |...... |
| | | | ---------------
| --------------- | | | 6 |
| | Instrucnion | | | ---------------
----- Pointer |<-- | Рис. 1.1 Блок исполнения и
--------------- | блок интерфейса шин
Системная шина - это совокупность проводников, соединяющих (bus) ЦП с памятью и устройствами ввода/вывода.
Проводники шины объединены в три группы:
- линии данных;
- линии адреса;
- линии управления.
Взаимодействие между интерфейсом ввода/выводда и шиной осуществляется через регистры, называемые портами ввода/вывода.
Назначение блока EU - исполнение команд, а блок BIU выполняет передачу команд и данных в EU. В состав EU входят арифметико-логическое устройство ALU, устройство управления CU и десять регистров. Устройства блока EU обеспечивают обработку команд, выполнение арифметических и логических операций.
Три части блока BIU - устройство управления шинами, блок очереди команд и регистры сегментов - предназначены для выполнения следующих функций:
- управление обменом данными с EU, памятью и внешними устройствами ввода/вывода;
- адресация 1 Мбайт памяти;
- выборка команд. Выборка команд осуществляется с помощью блока очереди команд Queue (шесть байтов), который позволяет выбирать команды с упреждением.
ПК имеет два вида внутренней памяти:
- постоянное запоминающее устройство ПЗУ (ROM - read only memory);
- оперативное запоминающее устройство ОЗУ (RAM - random acces memory).
Одна из основных задач ПЗУ обеспечить процедуру старта. В ПЗУ хранятся базовая система ввода/вывода BIOS, интерпретатор BASIC и некоторые служебные программы и таблицы, например, начальный загрузчик, программы тестирования и т.п.
ОЗУ используется для хранения программы и необходимых ей областей данных. Характерным для ПК является тот факт, что при выключении электропитания содержимое ОЗУ утрачивается.
Наименьшей единицей данных, с которой работает компьютер, является бит (bit). Значением бита может быть либо ноль, либо единица. Группа из восьми битов называется байтом (Byte) и представляет собой наименьшую адресуемую единицу - ячейку.
Биты в байте нумеруют справа налево цифрами 0...7.
---------------------------------
BYTE | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
---------------------------------.
Каждому из байтов присвоен уникальный адрес памяти, начиная с нулевого (самый младший адрес).
Двухбайтовое поле образует шестнадцатиразрядное машинное слово (Word), биты в котором нумеруются от 0 до 15 справа налево.
WORD
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Байт с меньшим адресом считается младшим.
В ПК принята двоичная система представления данных. Символьная информация кодируется в соответствии с кодом ASCII (Американский стандартный код для обмена информацией). Некоторые из его 256 символов заменяются на символы русского алфавита (кириллица). Числовые данные кодируются в соответствии с двоичной арифметикой. Отрицательные числа представляются в дополнительном коде. Для удобства представления данных используется шестнадцатиричная система счисления.
|
|
Принято двоичные числа сопровождать латинской буквой B или b, например, 101B, а шестнадцатиричные - буквой H или h на конце. Если число начинается с буквы, то обязательной является постановка нуля впереди, например, 0BA8H.
Регистры
Процессоры 8086/8088 имеют 14 шестнадцатиразрядных регистров, которые используются для управления исполнением команд, адресации и выполнения арифметических операций. Регистр, содержащий одно слово, адресуется по имени.
Регистры сегмента CS, DS, SS и ES
Регистр CS - содержит начальный адрес сегмента кода. Этот адрес, суммированный со значением смещения в указателе команд (IP), определяет очередную выполняемую команду.
Регистр DS - содержит начальный адрес сегмента данных. В простейшем случае этот адрес плюс смещение, указанное в инструкции, задает адрес в сегменте данных.
Регистр SS - содержит начальный адрес регистра стека.
Регистр ES - используется для адресации памяти в строковых операциях. И этом плане он похож на регистр DI. Регистр ES инициализируется программой на ассемблере.
Регистры общего назначения AX, BX, CX и DX
Регистры общего назначения являются основными рабочими регистрами ассемблерных программ. Их отличает то, что к ним можно адресоваться одним словом или однобайтовым кодом. Левый байт считается старшим, а правый - младшим.
Регистр AX - первичный аккумулятор, используется во всех операциях ввода/вывода, в некоторых операциях со строками и в некоторых арифметических операциях.
Регистр BX - базовый регистр, единственный из регистров общего назначения, используемый в индексной адресации. Кроме того, регистр BX используется при вычислениях.
Регистр DX - регистр данных. Используется в некоторых операциях ввода/вывода, в операциях умножения и деления больших чисел совместно с регистром AX.
|
|
Любой из регистров общего назначения может быть использован для суммирования или вычитания 8- или 16-разрядных величин.
Регистры указателя SP и BP
Регистры указателя используются для обращения к данным в сегменте стека.
Регистр SP - указатель стека. Используется для временного хранения адресов и иногда данных. Адресует стек аналогично регистру SS.
Регистр BP - указатель базы. Обеспечивает ссылки на параметры (данные и адреса, передаваемые через стек).
Индексные регистры SI и DI
Индексные регистры используются для адресации, а также для выполнения операций сложения и вычитания.
Регистр SI - индекс источника. Используется в некоторых операциях со строками или символами, аналогичен регистру DS.
Регистр DI - индекс приемника. Используется в тех же операциях, что и регистр SI. Аналогичен регистру ES.
Регистр указателя команд IP
Регистр IP используется для выборки очередной команды программы с целью ее исполнения.
Лекции 2,3.
ОПРЕДЕЛЕНИЕ ДАННЫХ. КОМАНДЫ ПЕРЕСЫЛКИ ДАННЫХ
Подробное описание каждой из команд приводится ниже. Каждая запись этого списка содержит информацию о том, какие признаки из регистра FLAGS процессора 8088 и как изменяются. Поскольку регистр FLAGS содержит всего 9 признаков, эту информацию можно выдать в компактной форме, например:
Признаки: O D I T S Z A P C
0 * *? * 0,
где приняты следующие обозначения признаков:
? - неопределен после операции;
* - изменился в зависимости от результатов выполнения
команды;
0 - всегда сброшен;
1 - всегда установлен.
IN Ввод байта или слова
Признаки не меняются.
Команда: IN accumulator,port.
Логика: accumulator = (port).
IN передает байт или слово из заданного порта port в AL или AX. Адрес порта может определяться как непосредственным байтовым значением (в диапазоне 0-255), так и с использованием косвенной адресации по регистру DX.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
байт(слово)
accumulator,непоср.8 10(14) 1 2 IN AL,45h
accumulator,DX 8(12) 1 1 IN AX,DX
Примечания:
Следует указать на то, что аппаратная часть не использует порты от F8h до FFh для ввода/вывода, поскольку они зарезервированы для контроля за внешним процессором и для других возможных расширений процессора в будущем.
2.1.2 LAHF Загрузка AH из регистра флагов
Признаки не меняются.
Команда: LAHF.
Логика: биты регистра AH: 7 6 4 2 0
биты регистра признаков FLAGS: S Z A P C.
Команда LAHF копирует пять признаков процессора 8080/8086 (признаки знака, нулевого результата, вспомогательного переноса, четности и переноса) в биты регистра AH с номерами 7, 6, 4, 2, 0 соответственно. Сами признаки при выполнении этой команды не меняются.
----------------------------------------------------------
Операнды Такты Обращения Байты Пример
нет операндов 4 - 1 LAHF
Примечания:
Эта команда используется, в основном, в целях обеспечения совместимости микропроцессоров семейств 8080/8085 и 8086. После выполнения этой команды значения битов регистра AH с номерами 1, 3 и 5 не определены.
2.1.3 LDS Загрузка указателя с использованием DS
Признаки не меняются.
Команда: LDS destination,source.
Логика: DS = (source)
destination = (source + 2).
Команда LDS загружает в два регистра 32-битный указатель, расположенный в памяти по адресу source. При этом старшее слово заносится в сегментный регистр DS, а младшее слово - в базовый регистр destination. В качестве операнда destination может выступать любой 16-битный регистр, кроме сегментных.
---------------------------------------------------------------
Операнды Такты Обращения Байты Пример
регистр16,память32 24+EA 2 2-4 LDS DI,32_POINTER
Примечания:
Команда LES, загрузка указателя с использованием ES, выполняет те же действия, что и LDS, но использует при этом вместо регистра DS регистр ES.
2.1.4 LEA Загрузка исполнительного адреса
Признаки не меняются.
Команда: LEA destination,source.
Логика: destination = Addr(source).
Команда LEA присваивает значение смещения (offset) операнда source (а не его значение!) операнду destination. Операнд source должен быть ссылкой на память, а в качестве операнда destination может выступать любой 16-битный регистр, кроме сегментных.
--------------------------------------------------------------
Операнды Такты Обращения Байты Пример
регистр16,память32 2+EA - 2-4 LEA BX,MEM_ADDR
Примечания:
Эта команда имеет то преимущество по сравнению с использованием оператора OFFSET в команде MOV, что операнду source можно иметь индексы. Например, следущая строчка не содержит ошибок:
LEA BX,TABLE[SI] в то время, как строка
MOV BX,OFFSET TABLE[SI]
ошибочна, так как оператор OFFSET вычисляется во время ассемблирования, а указанный адрес не будет известен до тех пор, пока программа не будет запущена на счет.
2.1.5 LES Загрузка указателя с использованием ES
Признаки не меняются
Команда: LES destination,source.
Логика: ES = (source)
destination = (source + 2).
Команда LES загружает в два регистра 32-битный указатель, расположенный в памяти по адресу source. При этом высшее слово заносится в сегментный регистр ES, а низшее слово - в базовый регистр destination. В качестве операнда destination может выступать любой 16-битный регистр, кроме сегментных.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
регистр16,память32 24+EA 2 2-4 LES DI,STR_ADDR
Примечания:
Команда LDS, загрузка указателя с использованием DS, выполняет те же действия, что и LES, но использует при этом вместо регистра ES регистр DS.
2.1.6 MOV Пересылка (байта или слова)
Признаки не меняются.
Команда: MOV destination,source.
Логика: destination = source.
MOV пересылает по адресу destination байт или слово, находящееся по адресу source.
2.1.7 OUT загрузка в порт
Признаки не меняются.
Команда: OUT port,accumulator.
Логика: (port) = accumulator.
OUT передает байт или слово из AL или AX в заданный порт. Адрес порта может определяться как непосредственным байтовым значением (в диапазоне 0-255), так и с использованием косвенной адресации по регистру DX.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
байт(слово)
непоср.8,accumulator 10(14) 1 2 OUT 254,AX
DX,accumulator 8(12) 1 1 OUT DX,AL
Примечания:
Следует указать на то, что аппаратная часть не использует порты от F8h до FFh для ввода/вывода, поскольку они зарезервированы для контроля за внешним процессором и для других возможных расширений процессора в будущем.
2.1.8 POP выборка слова из стека
Признаки не меняются.
Команда: POP destination.
Логика: destination = (SP)
SP = SP + 2.
Команда POP пересылает слово из верхушки стека по адресу destination, затем увеличивает указатель стека SP на 2, чтобы он указывал на новую верхушку стека.
------------------------------------------------------------
Операнды Такты Обращения Байты Пример
регистр 12 1 1 POP CX
сегм.регистр(кроме CS) 12 1 1 POP ES
память 25 + EA 2 2-4 POP VALUE
2.1.9 POPF пересылка слова из стека в регистр FLAGS
Признаки: O D I T S Z A P C r r r r r r r r r
Команда: POPF.
Логика: flag-register = (SP)
SP = SP + 2.
Команда POPF пересылает слово из верхушки стека в регистр FLAGS, изменяя значения всех признаков, затем увеличивает указатель стека SP на 2, чтобы он указывал на новую верхушку стека.
---------------------------------------------------------
Операнды Такты Обращения Байты Пример
нет операндов 12 1 1 POPF
2.1.10 PUSH загрузка слова в стек
Признаки не меняются.
Команда: PUSH source.
Логика: SP = SP - 2
(SP) = source.
Команда PUSH уменьшает значение указателя стека SP на 2, затем пересылает операнд в новую верхушку стека. Операндом source не может быть 8-битный регистр.
---------------------------------------------------------------
Операнды Такты Обращения Байты Пример
регистр 15 1 1 PUSH BX
сегм.регистр(кроме CS) 14 1 1 PUSH ES
память 24 + EA 2 2-4 PUSH PARAMETERS
Примечание:
Даже если source указывает на байт, в стек пересылается целое слово.
Микропроцессоры 80286 и 80786 перешлют в стек не те же значения, что микропроцессоры 8086/8088, если использовать команду PUSH SP. Микропроцессоры 80286 и 80386 перешлют старое значение SP, а 8086/8088 - новое значение SP в верхушку стека. Поэтому, в целях получения одинаковых результатов для всех микропроцессоров, используйте следующую последовательность команд:
PUSH BP
MOV BP, SP
XCHG BP, [SP]
Эта последовательность команд соответствует выполнению команды PUSH SP на микропроцессорах 8088/8086.
2.1.11 PUSHF загрузка содержимого регистра
FLAGS в стек
Признаки не меняются.
Команда: PUSHF.
Логика: SP = SP - 2
(SP) = flag-register.
Команда PUSHF уменьшает значение указателя стека SP на 2, затем пересылает слово из регистра FLAGS в верхушку стека.
------------------------------------------------------------
Операнды Такты Обращения Байты Пример
нет операндов 14 1 1 PUSHF
2.1.12 SAHF загрузка регистра AH в регистр флагов
Признаки: O D I T S Z A P C.
Команда: SAHF.
Логика: биты регистра признаков FLAGS: S Z A P C биты регистра AH: 7 6 4 2 0.
Команда SAHF копирует биты регистра AH с номерами 7, 6, 4, 2 и 0 в регистр FLAGS, заменяя текущие значения признаков знака, нулевого результата, вспомогательного признака переноса, четности и переноса.
------------------------------------------------------------
Операнды Такты Обращения Байты Пример
нет операндов 4 - 1 SAHF
Примечания:
Эта команда используется, в основном, в целях обеспечения совместимости микропроцессоров семейств 8080/8085 и 8086. После выполнения этой команды признаки переполнения, направления, прерывания и трассировки не изменяются.
2.1.13 XCHG обмен значениями
Признаки не меняются.
Команда: XCHG destination,source.
Логика: destination <--> source.
Команда XCHG обменивает значения своих операндов, которые могут быть байтами или словами.
---------------------------------------------------------------
Операнды Такты Обращения Байты Пример
байты
(слова)
память,регистр 17(25)+EA 2 2-4 LOCK XCHG SEM,DX
регистр,регистр 4 - 2 XCHG CL,DL
аккумулятор,регистр16 3 - 1 XCHG AX,SI
Примечание:
Эта команда в паре с префиксом LOCK полезна, в частности, при реализации семафоров для управления разделенными ресурсами.
2.1.14 XLAT кодирование AL по таблице
Признаки не меняются.
Команда: XLAT translate-table.
Логика: AL = (BX + AL).
Команда XLAT переводит байт, согласно таблице преобразований. Указатель 256-байтовой таблицы преобразований находится в BX. Байт, который нужно перевести, расположен в AL. После выполнения команды XLAT байт в AL заменяется на байт, смещенный на AL байтов от начала таблицы преобразований.
-------------------------------------------------------------
Операнды Такты Обращения Байты Пример
translate-table 11 1 1 XLAT SINE_TABLE
Примечания:
Таблица преобразований может содержать менее 256 байтов. Операнд, т.е. translate-table, является необязательным, поскольку указатель таблицы должен быть загружен в BX еще до начала выполнения команды.
Следующий пример иллюстрирует перевод десятичного числа (от 0 до 15) в соответствующую "цифру" шестнадцатеричной системы счисления:
LEA BX,HEX_TABLE ;указатель таблицы засылаем в BX,
MOV AL,DECIMAL_DIGIT;а переводимую цифру - в AL
XLAT HEX_TABLE ;переводим
. ;теперь в AL находится ASCII-код
. ;соответствующей цифры
. ;шестнадцатеричной системы
HEX_TABLE DB '0123456789ABCDEF'
Лекция 4.