Определение данных. Команды пересылки данных

Московский государственный открытый университет

 

 



Лекции по

 

 

Чебоксары 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.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: