- •Горшков ю.Е.
- •Основы электронновычислительных машин Конспект лекций и лабораторные работы
- •Физические основы вычислительных процессов
- •1. Роль физики в развитии вычислительных систем и сетей
- •2. Информация и ее физические носители
- •5. Производство полупроводниковых микросхем
- •6. Современное состояние и перспективы развития вычислительных средств
- •7. Технические средства человеко-машинного интерфейса
- •8. Магнитные и оптические носители информации
- •9. Твердотельные носители информации – Flash-карты
- •Функционально-структурная организация и программное обеспечение персонального компьютера
- •Работа 6. Устройство и модернизация системного блока персонального компьютера.
- •Виртуальные вычислительные машины и устройства
- •Регистры и команды микропроцессора, основы языка ассемблер
- •Представление данных в пэвм
- •III. Вычислительные системы
- •1. Архитектура вычислительных систем
- •2. Основы программирования параллельных вычислений
- •3. Примеры вычислительных систем
- •V. Особенности архитектуры и программирования микропроцессоров Intel 80x86
- •V.1 Язык программирования asm-51
- •2. Директивы языка программирования asm-51
- •2. Структурное программирование на языке Assembler
- •3.Использование сегментов в ассемблере
- •4. Программы и подпрограммы. Связь по управлению и по данным
- •5. Прерывания и их обработка.
- •Контроллер прерываний и микропроцессоры 80х86.
- •6. Сопроцессор и его программирование
- •7. Виртуальная память
- •Лабораторная работа № 2. Программирование циклов и условий. Работа с массивами.
- •Лабораторная работа № 3. Программы и подпрограммы. Связь по управлению и по данным
- •Лабораторная работа № 4. Сопроцессор и его программирование
- •Лабораторная работа 5 Использование средств bios на языке Ассемблер
- •Краткие сведения о прерываниях bios
- •ПриложениЕ Государственный стандарт дисциплины “Вычислительные системы, сети и телекоммуникации”
- •Литература
- •Учебное издание Самарин Вячеслав Владимирович Серолапкин Александр Владимирович
Регистры и команды микропроцессора, основы языка ассемблер
Оперативная память
Оперативная память (ОП) ПК делится на ячейки размером в 8 разрядов (битов) или в 1 байт. В каждом разряде может быть записано значение 0 или 1. Разряды байта нумеруются справа налево от 0 до 7. При этом правые разряды (с меньшими номерами) называются младшими, а левые разряды старшими. Для краткости содержимое ячеек часто записывают в шестнадцатиричной системе, указывая в конце записи букву h (hexadecimal шестнадцатиричный). Например, содержимое байта 0001011 можно записать как 13h (десятичное 19). Байты нумеруются с 0, порядковый номер байта называется его адресом. Словом (word) называют два соседних байта, его размер 16 разрядов, нумеруемых справа налево от 0 до 15. Его адресом считается по определению адрес его первого байта (с меньшим разрядом). Двойное слово (double word) это четыре соседних байта или два соседних слова. Размер двойного слова 32 разряда, они нумеруются справа налево от 0 до 31. Адрес двойного слова адрес первого из его байтов (с наименьшим адресом). ПК может работать как с байтами, так и со словами и двойными словами (и в целом, и побайтно). При наличии 16-разрядного кода адреса можно непосредственно адресовать всего 216=164=65536 байт=64К (1К=210=1024) с адресами от 0 до FFFF. Этот объем 64Кбайт, называемый сегментом, является базовым в логической структуре. Объем непосредственно адресуемой оперативной памяти ПК 220 байт (1 Мбайт), поэтому для ссылок на байты памяти нужны 20-разрядные слова от 00000h до FFFFFh. Непосредственно адресуемая память состоит из стандартной памяти (CMA – Conventional Memory Area) в диапазоне от 0 до 640К, (первые 64К из них – это область служебных программ и данных ОС, а в остальных 576К размещаются программы и данные ОС и пользователя) и верхней памяти (UMA – Upper Memory Area) в диапазоне от 640 до 1024К, зарезервированной для видеопамяти и постоянного запоминающего устройства (ПЗУ – 128К). Свободные участки верхней памяти могут использоваться и в качестве ОП общего назначения. Память с адресами 1024К и выше называют расширенной, доступ к ней возможен при использовании специальных программ-драйверов или в защищенном режиме работы микропроцессора. Ее часть от 1024 до 1088К, называемая высокой памятью, может адресоваться непосредственно при сложении максимального адреса сегмента FFFFF и смещения, не превышающего 64К.
Если требующееся программе адресное пространство превышает размер оперативной памяти, данные размещаются на жестком диске. Единое адресное пространство, используемое при этом программой, называют виртуальной памятью. Оно делится на секции (страницы) одинаковой величины. Выгрузка на диск и загрузка в оперативную память (для последующей выборки по запросу процессора) производится страницами. Этот процесс, выполняемый операционной системой, называется свопингом (от англ. swap – подкачивать) или пейджингом (paging - постраничная подкачка). Виртуальный адрес состоит из номера страницы и смещения (адреса относительно начала страницы). Преобразование виртуального адреса в физический при чтении/записи данных выполняет устройство управления памятью (Memory Management Unit) с помощью таблицы страниц.
Для эффективной работы компьютера необходимо, чтобы операции выборки данных из памяти выполнялись со скоростью, сравнимой со скоростью их обработки центральным процессором. Поэтому используется иерархическая память с двумя основными уровнями – маленькая, но быстрая память (регистры микропроцессора, кэш-память первого и второго уровней) и медленная память большого объема (оперативная и внешняя память). Кэш-память предназначена для хранения данных из оперативной памяти, которые использовались недавно. Согласно принципу локальности во времени, если программа обратилась к какому-либо элементу данных, он может вскоре понадобиться вновь. Согласно принципу локальности в пространстве, при этом могут потребоваться элементы данных, адреса которых мало отличаются от адреса данных, используемых в настоящий момент.
Регистры и команды микропроцессоров Intel
Регистры ячейки памяти, расположенные в центральном процессоре, используемые для кратковременного хранения данных и доступные из машинных программ. В качестве основной модели для языка ассемблер используется микропроцессорная память (МПП) базового МП 8086 из четырнадцати регистров двухбайтовых (16 разрядов), за каждым закреплено определенное имя (рис. 2.11 справа).
Рис.2.11. Регистры процессора Intel
По назначению и способу использования регистры можно разбить на следующие группы:
Регистры общего назначения (AX, BX, CX, DX, SI, DI,BP, SP), аналогичные четырехбайтовые регистры у МП 80386 и выше именуются ЕAX, ЕBX,…(рис. 3.41 слева);
Сегментные или адресные регистры (CS, DS, SS, ES);
Указатель команд (IP);
Регистр флагов (Flags).
Название регистров общего назначения могут быть расшифрованы следующим образом:
AX accumulator, аккумулятор;
BX base, база;
CX counter счетчик;
DX data данные;
(буква Х от слова еXtended, расширенный; в процессоре 8080 были байтовые регистры A, B, C, D, впоследствии расширенные до слова)
SI source index, индекс источника;
DI destination index, индекс приемника;
BP base pointer, указатель базы;
SP stack pointer, указатель стека.
Все эти регистры можно использовать в любых арифметических, логических и т.п. машинных операциях. Однако каждый из них имеет определенную специализацию. Некоторые команды требуют, чтобы их операнд или операнды обязательно находились в определенных регистрах. Например, команда деления требует, чтобы первый операнд (делимое) находился в регистре АХ или в регистрах АХ и DX (в зависимости от размера операнда). Команды управления циклом используют регистр СХ в качестве счетчика цикла. Регистры AX, BX, CX и DX могут делиться на части (по одному байту), называемые соответственно AH (Нigh старший) и AL (Low младший), BH и BL, CH и CL, DH и DL. Запись в другие регистры и чтение из них осуществляется только целиком.
Названия сегментных регистров (в старших моделях процессоров их число увеличено) можно расшифровать так:
CS code segment, сегмент команд;
DS data segment, сегмент данных;
SS stack segment, сегмент стека;
ES extra segment, дополнительный сегмент.
Эти регистры используются только для записи и считывания при выполнении сегментирования адресов. В регистре CS должен находиться начальный адрес сегмента команд той области памяти, где расположены команды программы. Регистр DS должен указывать на начало сегмента данных, в котором размещаются данные программы. Регистр SS должен указывать на начало области памяти, отведенной под стек. Если это сделано, тогда при ссылках на эти сегменты (команд, данных и стека) в командах названия этих регистров можно не указывать, они будут подразумеваться по умолчанию. При сегментировании адресов любой адрес ячейки А представляется в виде суммы B+D, где В начальный адрес (база) того участка (сегмента) памяти, в котором находится ячейка А, а D это смещение, адрес ячейки A, отсчитанный от начала этого сегмента (от В). В ПК размеры сегментов памяти не должны превышать 64 Кбайт (216=65536), поэтому смещения это 16-разрядные адреса. Смещения (относительные 16-разрядные адреса) меняются от 0000h до FFFFh, в то время как абсолютные 20-разрядные адреса от 00000h до FFFFFh.
В регистре IP (Instruction Pointer, указатель команд) находится адрес команды, которая должна выполняться следующей. Более точно, в IP находится адрес этой команды, отсчитанный от начала сегмента команд, на начало которого указывает регистр CS. Поэтому абсолютный адрес этой команды определяется парой регистров CS и IP. Содержимое этих регистров можно менять только командами перехода.
Каждый разряд (бит) регистра флагов имеет строго определенное значение. Флаг это бит, принимающий значение 1 (“флаг установлен”), если выполнено некоторое условие, и значение 0 (“флаг сброшен”) в противном случае. В ПК используется 9 флагов, причем они собраны в один 16-разрядный регистр Flag (некоторые разряды не заняты).
Программа, управляющая работой любой ЭВМ, состоит из отдельных команд и вместе с данными размещается в основной памяти. Каждая команда размещается в отдельной ячейке памяти (или группе смежных ячеек) и имеет свой адрес. Структура всех команд одинакова, они состоят из двух частей: кода операции и адресной части. Код операции определяет операцию, которую нужно выполнить. Адресная часть определяет, где хранятся операнды, т.е. обрабатываемые данные, и куда необходимо поместить результат операции. Машинные команды ПК занимают от 1 до 6 байт. Код операции занимает один или два первых байта команды. Использование одного (первого) байта дает возможность закодировать только 256 команд, что недостаточно. Поэтому некоторые операции объединяются в группу и им дается один и тот же код, во втором же байте этот код уточняется. Кроме того, во втором байте указываются типы операндов и способы их адресации. Команды ПК могут иметь от 0 до 6 операндов. Размер операндов байт или слово (реже двойное слово). Операнд может быть указан в самой команде (непосредственный операнд), либо может находиться в одном из регистров ПК, и тогда в команде указывается адрес ячейки. Результат выполнения команды помещается в регистр или ячейку памяти, откуда берется один из операндов. В отношении всех команд, операнды которых берутся из памяти, применяется сегментирование адресов, поэтому в командах указываются только 16-разрядные адреса (смещения), а не "длинные" 20-разрядные адреса. Таким образом уменьшается размер команды.
