Особенности архитектуры современной вычислительной машины 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Особенности архитектуры современной вычислительной машины



История развития ЭВМ

Одним из первых устройств (VI—V вв. до н. э.), облегчающих вычисления, можно считать специальную доску для вычислений, названную «абак». Вычисления на ней производились перемещением камешков или костей в углубления досок из бронзы, камня или слоновой кости.В 1670—1680 гг. немецкий математик Готфрид Лейбниц конструировал счётную машину, которая выполняла все арифметические действия. В течение следующих двухсот лет было изобретено и построено ещё несколько подобных счётных устройств, которые, однако, из-за своих недостатков, в том числе из-за медлительности в работе, не получили широкого распространения.Лишь в 1878 году русский ученый П. Чебышёв предложил счётную машину, выполнявшую сложение и вычитание многозначных чисел. Наибольшую популярность получил тогда арифмометр, сконструированный петербургским инженером Однером в 1874 году Конструкция прибора оказалась весьма удачной, так как позволяла довольно быстро выполнять все четыре арифметических действия.В 30-е годы XX столетия в нашей стране был разработан более совершенный арифмометр — «Феликс». Эти счётные устройства использовались несколько десятилетий, став основным техническим средством облегчения человеческого труда.В 1834 году Бэббидж приступил к созданию «аналитической» машины. Его проект содержал более 2000 чертежей различных узлов. Машина Бэббиджа предполагалась как чисто механическое устройство с паровым приводом. Она состояла из хранилища для чисел («склад»), устройства для производства арифметических действий над числами (Бэббидж назвал его «фабрикой») и устройства, управляющего операциями машины в нужной последовательности, включая перенос чисел из одного места в другое; были предусмотрены средства для ввода и вывода чисел. Бэббидж работал над созданием своей машины до конца своей жизни (он умер в 1871 году), успев сделать лишь некоторые узлы своей машины, которая оказалась слишком сложной для того уровня развития техники. После Бэббиджа значительный вклад в развитие техники автоматизации счёта внёс американский изобретатель Г. Холлерит, который в 1890 году впервые построил ручной перфоратор для нанесения цифровых данных на перфокарты и ввёл механическую сортировку для раскладки этих перфокарт в зависимости от места пробива. Им была построена машина — табулятор, которая прощупывала отверстия на перфокартах, воспринимала их как соответствующие числа и подсчитывала их. Холлерит основал всемирно известную фирму Computer Tabulating Recording, специализирующуюся на выпуске счетно-перфорационных машин и перфокарт. В дальнейшем фирма была преобразована в фирму International Business Machines (IBM), ставшую сейчас передовым разработчиком компьютеров. Разработка первой серии электронной машины UNIAC (Universal Automatic Computer) начата примерно в 1947 году. Д. П. Эккертом и Д. Мочли, основавшими фирму Eckert-Mauchly. Первый образец UNIAC-1 был построен для Бюро переписи США в 1951 г. UNIAC был создан на базе ЭВМ ENIAC и EDVIAC. Работала с тактовой частотой 2,25 МГц и содержала около 5000 электронных ламп. Емкость памяти — 1000 12-разрядных десятичных чисел. В середине 50-ых гг. XX века, когда ламповые компьютеры достигли «насыщения», ряд фирм объявил о работах по созданию транзисторных ЭВМ. Первоначально это вызвало скептицизм из-за того, что производство полупроводников будет сложным и дорогостоящим. Однако этого не случилось — постоянно совершенствовались методы производства транзисторов. В 1955 году в США было объявлено о создании цифрового компьютера TRADIC, построенного на 800 транзисторах и 11 000 германиевых диодах. В этом же году фирма объявила о создании полностью транзисторной ЭВМ. Первая такая машина «Philco-2000» была сделана в ноябре 1958 года, она содержала 56 тыс. транзисторов, 1 200 диодов, но всё же в её составе было 450 электронных ламп. «Philco-2000» выполняла сложение за 1,7 мкс, умножение — за 40,3 мкс. В 1971 году компания Intel выпустила микросхему Intel-4004 — первый микропроцессор и родоначальник доминирующего и самого известного сегодня семейства. В 1976 году компания Intel начала усиленно работать над микропроцессором Intel-8086. Размер его регистров был увеличен вдвое, что дало возможность увеличить в 10 раз производительность по сравнению с 8080. Кроме того, размер адресной шины был увеличен до 16 бит, чем опередил своё время — ему дополнительно нужна 16-разрядная микросхема.В 1979 году был разработан новый процессор — Intel-8088. Вянваре 1984 г. состоялась презентация первого компьютера Macintosh компании Apple Computer. В 1989 году появляется новая разработка компании Intel — микропроцессор Intel-80486 (Intel-80486DX). В 1993 году компания Intel начала промышленный выпуск нового процессора — Intel Pentium (Intel не стал присваивать ему номер 80586). Первые модели работали на тактовой частоте 60 и 66 МГц и объединяли в себе до 3,3 млн. транзисторов. Pentium — это первый 64-разрядный суперскалярный процессор с RISC-ядром, изготовленный по 0,8-микронной технологии BiCMOS.

Общее устройство компьютера и особенности архитектуры

В общем случае, компьютер - это системный блок, монитор, клавиатура, мышь. Корпус системного блока включает блок питания с вентилятором, обеспечивающим общее охлаждение системы. Корпус - это шасси, на которое крепятся все внутренние компоненты системы. Он служит также как защита от непреднамеренных механических воздействий. Материнская (системная) плата - самая большая плата компьютера. Именно к ней присоединяются все остальные внутренние устройства, как-то: процессор, оперативная память, видеоадаптер, звуковая карта и т.п. На материнской плате располагается великое множество микросхем, без которых нормальная работа системы невозможна. К материнской плате подключаются дополнительные платы расширения поменьше, осуществляющие необходимые функции. Многие из них стандартизированы (например порты ввода/вывода) и встроены в саму материнскую плату. Процессор (микропроцессор) - мозг всей компьютерной системы. В отличие от других микросхем имеет довольно внушительные размеры. Состоит из десятков миллионов транзисторов, образующих отдельные логические схемы.Общая схема процессора включает арифметико-логическое устройство, внутреннюю память (регистры), кэш (сверхоперативная память), схемы управления всеми операциями, а также схемы управления внешними шинами (каналы-магистрали, по которым передаются данные и команды) для связи с внешним миром. Данные и команды пересылаются процессору по внешним шинам и обрабатываются в арифметико-логическом устройстве. Результат выводится на внешнюю шину.Чем больше разрядов имеют схемы процессоров, тем большее количество информации обрабатывается за такт, что непременно сказывается на производительности компьютерной системы. Оперативная память предназначена для хранения необходимых данных, результатов вычислений и других "продуктов жизнедеятельности" компьютера для быстрого доступа к ним со стороны запрашивающих устройств. Оперативная память недолговечна. Данные в ней "живут" пока она питается электроэнергией. При выключении компьютера, вся информации, находящаяся в оперативной памяти, теряется. Жесткий диск (HDD - hard disk drive) в обиходе называют "винчестером". Это то хранилище, куда операционная система и запущенные программы помещают результаты своих трудов, различную служебную информацию и параметры работы. FDD (floppy disk drive) - дисковод гибких дисков - представляет собой устройство чтения/записи сменных гибких дисков (флоппи-дисков, дискет). CD-ROM (compact disk-read only memory) - устройство чтения компакт дисков. Звуковая карта относится к мультимедийным устройствам, позволяющим воспроизводить музыку и внятную человеческую речь.

Архитектура памяти ЭВМ

Оперативная память современных ЭВМ массового производства способна считывать и записывать данные примерно каждые 2 наносекунды (нс., 1нс = 10-9 сек.), а центральный процессор может выполнить машинную машинную операцию над содержимым своих регистров примерно за 1нс.

На современных ЭВМ проблема несоответствия скорости работы оперативной памяти и центрального процессора решается в совокупности несколькими способами. Так как главным тормозом в работе является оперативная память, эту па-мять стали делать таким образом, чтобы за одно обращение к ней она выдавала не по одному байту, а сразу по несколько байт с последовательными адресами. Для этого оперативную память разбивают на блоки (обычно называемые банками памяти), причём эти банки памяти могут работать параллельно. Этот приём называют расслоением памяти. 80% своего времени цен-тральный процессор вынужден ждать, пока из оперативной памяти поступят нужные команды и дан-ные. Для того чтобы исправить эту неприятную ситуацию, в архитектуру современных компьютеров встраивается специальная память, которую называют памятью типа кэш, или просто кэшем. Кэш делается на очень быстрых интегральных схемах статической памяти и работает с такой же скоростью, как и сам центральный процессор, т.е. может, например, выдавать по 8 байт за каждую наносекунду. Для программиста кэш является невидимой памятью в том смысле, что эта память не адресуемая, к ней нельзя обратиться из программы по какой-либо команде чтения или записи дан-ных. Конечно, существуют привилегированные команды для работы с кэшем как с единым целым, это, например, команда очистки кэша от всех находящихся там команд и данных. Когда центральному процессору нужна какая-то команда или данное, то сначала он смотрит, не находится ли уже эта команда или данные в кэше, и, если они там есть, читает их оттуда, не обраща-ясь к оперативной памяти. Разумеется, если требуемой команды или данных в кэше нет, то централь-ный процессор вынужден читать их из относительно медленной оперативной памяти, однако копию прочитанного он обязательно оставляет при этом в кэше. Особая ситуация складывается, если требуется что-то записать в кэш, а там нет свободного места. В этом случае по специальному алгоритму из кэша удаляются некоторые данные, обычно те, к которым дольше всего не было обращения из центрального процессора. Проще всего это сделать, если вести очередь обра-щений к данным в кэше, при этом при каждом чтении или записи некоторого данного, оно ставится в начало этой очереди. Легко понять, что при этом в конце очереди автоматически соберутся те дан-ные, к которым дольше всего не было обращения. При этом, если эти данные в кэш памяти изменя-лись, то они переписываются в оперативную память. В архитектуре некоторых ЭВМ может быть два отдельных кэша, один для команд и другой для данных. При этом обычно команды запрещается ме-нять, поэтому в кэш команд никогда не производится запись, что позволяет упростить реализацию этого кэша.

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

Виртуальная память

Виртуальная память позволяет модифицировать ресурсы памяти, сделать объём оперативной памяти намного больше, для того чтобы пользователь, поместив туда как можно больше программ, реально сэкономил время и повысил эффективность своего труда. "Открытие" виртуальной памяти (далее ВП) внесло огромную контрибуцию в развитие современных технологий, облегчило работу, как профессионального программиста, так и обычного пользователя, обеспечивая процесс более эффективного решения задач на ЭВМ. Виртуальная память представляет собой совокупность всех ячеек памяти оперативной и внешней, имеющих сквозную нумерацию от нуля до предельного значения адреса. Использование ВЗУ очень удобно, так как в это время пользователь оперирует с общим адресным пространством и ему безразлично, какая физическая память при этом используется внешняя или внутренняя. При работе ВП всего лишь подразумевается различие между виртуальными адресами и физическими.

При работе машины с ВП, используются методы страничной, сегментной и сегментно-страничной организации памяти.

(страничная организация). Нужно отметить очень важный пункт, что при СО, все ресурсы памяти, как оперативной, так и внешней представляются для пользователя единым целым. Пользователь работает с общим адресным пространством и не задумывается, какая память при этом используется: оперативная или внешняя, а эта общая память носит название виртуальной (моделируемой). Виртуальная память разбивается на страницы, которые содержат определённое фиксированное количество ячеек памяти. При этом одна страница математической памяти не может быть больше или меньше других все страницы должны быть одинаковы по количеству ячеек. Передача информации между памятью и диском всегда осуществляется целыми страницами. Страницы, в отличие от сегментов, имеют фиксированную длину, обычно являющуюся степенью числа 2, и не могут перекрываться.

При использовании метода сегментно-страничной организации ВП, пользовательские программы разбиваются на отдельные массивы. Эти массивы независимые участки называются сегментами. При сегментной организации виртуальный адрес по-прежнему является двумерным и состоит из двух полей - номера сегмента и смещения внутри сегмента. Заметим, что с точки зрения ОС сегменты являются логическими сущностями и их главное назначение хранение и защита однородной информации (кода, данных и т.д.). Отличие сегмента от страницы состоит в том, что длина сегмента может изменяться в процессе работы.

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

Система адресации

Система адресации данных — это одна из самых важных составляющих файловой системы. Именно она позволяет находить нужный файл среди множества как пустых, так и занятых блоков на диске.Файловая система ext2 использует следующую схему адресации блоков файла. Для хранения адреса файла выделено 15 полей, каждое из которых состоит из 4 байт. Если файл умещается в 12 блоков, то номера соответствующих кластеров непосредственно перечисляются в первых двенадцати полях адреса. Если размер файла превышает 12 блоков, то следующее поле содержит адрес кластера, в котором могут быть расположены номера следующих блоков файла. Таким образом, 13-е поле используется для косвенной адресации.При максимальном размере блока в 4096 байт кластер, соответствующий 13-му полю, может содержать до 1024 номеров следующих блоков файла. Если размер файла превышает 12+1024 блоков, то используется 14-е поле, в котором находится адрес кластера, содержащего 1024 номеров кластеров, каждый из которых ссылается на 1024 блока файла. Здесь применяется уже двойная косвенная адресация. И наконец, если файл включает более 12+1024+1048576 блоков, то используется последнее 15-е поле для тройной косвенной адресации.Данная система адресации позволяет при максимальном размере блока в 4096 байт иметь файлы, размер которых превышает 2 TB.

Процессор

Центра́льный проце́ссор — электронный блок либо микросхема — исполнитель машинных инструкций (кода программ), главная часть аппаратного обеспечения компьютера или программируемого логического контроллера. Иногда называют микропроцессором или просто процессором. Главными характеристиками ЦПУ являются: тактовая частота, производительность, энергопотребление и архитектура.

CISC-процессоры

Complex instruction set computer — вычисления со сложным набором команд. Процессорная архитектура, основанная на усложнённом наборе команд. Типичными представителями CISC являются микропроцессоры семейства x86

RISC-процессоры

Reduced instruction set computer — вычисления с упрощённым набором команд (в литературе слово reduced нередко ошибочно переводят как «сокращённый»). Архитектура процессоров, построенная на основе упрощённого набора команд, характеризуется наличием команд фиксированной длины, большого количества регистров, операций типа регистр-регистр, а также отсутствием косвенной адресации.

MISC-процессоры

Minimum instruction set computer — вычисления с минимальным набором команд. Дальнейшее развитие идей команды Чака Мура, который полагает, что принцип простоты, изначальный для RISC-процессоров, слишком быстро отошёл на задний план. В пылу борьбы за максимальное быстродействие, RISC догнал и перегнал многие CISC процессоры по сложности. Архитектура MISC строится на стековой вычислительной модели с ограниченным числом команд (примерно 20-30 команд).

VLIW-процессоры

Very long instruction word — сверхдлинное командное слово. Архитектура процессоров с явно выраженным параллелизмом вычислений, заложенным в систему команд процессора. Являются основой для архитектуры EPIC. Ключевым отличием от суперскалярных CISC-процессоров является то, что для них загрузкой исполнительных устройств занимается часть процессора (планировщик), на что отводится достаточно малое время, в то время как загрузкой вычислительных устройств для VLIW-процессора занимается компилятор, на что отводится существенно больше времени (качество загрузки и, соответственно, производительность теоретически должны быть выше). Примером VLIW-процессора является Intel Itanium.

(многоядерные бывают)

Сегменты процессора

Сегментом называется область, которая начинается на границе

параграфа, т.е. по любому адресу, который делится на 16 без остатка. Хотя

сегмент может располагаться в любом месте памяти и иметь размер до 64

Кбайт, он требует столько памяти, cколько необходимо для выполнения

программы. Имеется три главных сегмента:

 

1. С е г м е н т к о д о в. Сегмент кодов содержит машинные

команды, которые будут выполняться. Обычно первая выполняемая команда

находится в начале этого сегмента и операционная система передает

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

Регистр сегмента кодов (CS) адресует данный сегмент.

2. С е г м е н т д а н н ы х. Сегмент данных содержит

определенные данные, константы и рабочие области, необходимые

программе. Регистр сегмента данных (DS) адресует данный сегмент.

3. С е г м е н т с т е к а. Стек содержит адреса возврата как

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

подпрограмм для возврата в главную программу. Регистр сегмента стека

(SS) адресует данный сегмент.

 

Еще один сегментный регистр, регистр дополнительного сегмента (ES),

предназначен для специального использования

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

Процессоры 8086/8088 имеют 14 регистров, используемых для yправления

выполняющейся программой, для адресации памяти и для обеспечения

арифметических вычислений. Каждый регистр имеет длину в одно слово (16

бит) и адресуется по имени. Биты регистра принято нумеровать слева

направо:

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

 

Процессоры 80286 и 80386 имеют ряд дополнительных регистров,

некоторые из них 16-битовые. Эти регистры здесь не рассматриваются.

 

 

Сегментные регистры CS, DS, SS и ES

-------------------------------------

Каждый сегментный регистр обеспечивает адресацию 64К памяти, которая

называется текущим сегментом. Как показано ранее, cегмент выравнен на

границу параграфа и его адрес в сегментном pегистре предполагает наличие

справа четырех нулевых битов.

 

1. Р е г и с т р CS. Регистр сегмента кода содержит начальный

адрес сегмента кода. Этот адрес плюс величина смещения в командном

указателе (IP) определяет адрес команды, которая должна быть выбрана

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

на регистр CS.

2. Р е г и с т р DS. Регистр сегмента данных содержит начальный

адрес сегмента данных. Этот адрес плюс величина смещения,

определенная в команде, указывают на конкретную ячейку в сегменте

данных.

3. Р е г и с т р SS. Регистр сегмента стека содержит начальный

адрес в сегменте стека.

4. Р е г и с т р ES. Некоторые операции над строками используют

дополнительный сегментный регистр для управления адресацией памяти. В

данном контексте регистр ES связан с индексным регистром DI. Если

необходимо использовать регистр ES, ассемблерная программа должна его

инициализировать.

 

 

Регистры общего назначения: AX, BX, CX и DX

---------------------------------------------

При программировании на ассемблере регистры общего назначения

являются "рабочими лошадками". Особенность этих регистров состоит в том,

что возможна адресация их как одного целого слова или как oднобайтовой

части. Левый байт является старшей частью (high), a правый - младшей

частью (low). Например, двухбайтовый регистр CX состоит из двух

однобайтовых: CH и CL, и ссылки на регистр возможны по любому из этих трех

имен. Следующие три ассемблерные команды засылают нули в регистры CX, CH и

CL, соответственно:

 

MOV CX,00

MOV CH,00

MOV CL,00

 

1. Р е г и с т р AX. Регистр AX является основным сумматором и

применяется для всех операций ввода-вывода, некоторых операций над

строками и некоторых арифметических операций. Например, команды

умножения, деления и сдвига предполагают использование регистра AX.

Некоторые команды генерируют более эффективный код, если они имеют

ссылки на регистр AX.

 

AX: | AH | AL |

 

2. Р е г и с т р BX. Регистр BX является базовым регистром. Это

единственный регистр общего назначения, который может использоваться

в качестве "индекса" для расширенной адресации. Другое общее

применение его - вычисления.

 

BX: | BH | BL |

 

3. Р е г и с т р CX. Регистр CX является счетчиком. Он необходим

для управления числом повторений циклов и для операций сдвига влево

или вправо. Регистр CX используется также для вычислений.

 

CX: | CH | CL |

 

4. Р е г и с т р DX. Регистр DX является регистром данных. Он

применяется для некоторых операций ввода/вывода и тех операций

умножения и деления над большими числами, которые используют

регистровую пару DX и AX.

 

DX: | DH | DL |

 

Любые регистры общего назначения могут использоваться для cложения и

вычитания как 8-ми, так и 16-ти битовых значений.

 

 

Регистровые указатели: SP и BP

--------------------------------

Регистровые указатели SP и BP обеспечивают системе доступ к данным в

сегменте стека. Реже они используются для операций сложения и вычитания.

 

1. Р е г и с т р SP. Указатель стека обеспечивает использование

стека в памяти, позволяет временно хранить адреса и иногда данные.

Этот регистр связан с регистром SS для адресации стека.

2. Р е г и с т р BP. Указатель базы облегчает доступ к

параметрам: данным и адресам переданным через стек.

 

 

Индексные регистры: SI и DI

-----------------------------

Оба индексных регистра возможны для расширенной адресации и для

использования в операциях сложения и вычитания.

 

1. Р е г и с т р SI. Этот регистр является индексом источника и

применяется для некоторых операций над строками. В данном контексте

регистр SI связан с регистром DS.

2. Р е г и с т р DI. Этот регистр является индексом назначения и

применяется также для строковых операций. В данном контексте регистр

DI связан с регистром ES.

 

 

Регистр командного указателя: IP

----------------------------------

Регистр IP содержит смещение на команду, которая должна быть

выполнена. Обычно этот регистр в программе не используется, но он может

изменять свое значение при использовании отладчика DOS DEBUG для

тестирования программы.

 

 

Флаговый регистр

------------------

Девять из 16 битов флагового регистра являются активными и определяют

текущее состояние машины и результатов выполнения. Многие арифметические

команды и команды сравнения изменяют состояние флагов.

Машинная адресация

Для доступа к машинной команде процессор определяет ее адрес из

содержимого регистра CS плюс смещение в регистре IP. Например,

предположим, что регистр CS содержит шест.04AF (действительный адрес

04AF0), а регистр IP содержит шест. 0023:

 

CS: 04AF0

IP: 0023

-----

Адрес команды: 04B13

 

Если, например, по адресу 04B13 находится команда:

 

A11200 MOV AX,[0012]

|

Адрес 04B13

 

то в памяти по адресу 04B13 содержится первый байт команды. Процессор

получает доступ к этому байту и по коду команды (A1) oпределяет длину

команды - 3 байта.

Для доступа к данным по смещению [0012] процессор определяет aдрес,

исходя из содержимого регистра DS (как правило) плюс cмещение в операнде

команды. Если DS содержит шест.04B1 (реальный адрес 04B10), то

результирующий адрес данных определяется cледующим образом:

 

DS: 04B10

Смещение: 0012

-----

Адрес данных: 04B22

 

Предположим, что по адресам 04B22 и 04B23 содержатся следующие

данные:

 

Содержимое: 24 01

| |

Адрес: 04B22 04B23

 

Процессор выбирает значение 24 из ячейки по адресу 04B22 и помещает

его в регистр AL, и значение 01 по адресу 04B23 - в регистр AH. Регистр AX

будет содержать в результате 0124. В процессе выборки каждого байта

команды процессор увеличивает значение регистра IP на единицу, так что к

началу выполнения следующей команды в нашем примере IP будет содержать

смещение 0026. Таким обpазом процессор теперь готов для выполнения

следующей команды, которую он получает по адресу из регистра CS (04AF0)

плюс текущее смещение в регистре IP (0026), т.е. 04B16.

 

 

Четная адресация

------------------

Процессор 8086, 80286 и 80386 действуют более эффективно, eсли в

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

В предыдущем примере процессор может сделать oдну выборку слова по адресу

4B22 для загрузки его непосредственно в регистр. Но если слово начинается

на нечетном адресе, процессор выполняет двойную выборку. Предположим,

например, что команда должна выполнить выборку слова, начинающегося по

адреcу 04B23 и загрузить его в регистр AX:

 

Содержимое памяти: |хх|24|01|хх|

|

Адрес: 04B23

 

Сначала процессор получает доступ к байтам по адресам 4B22 и 4B23 и

пересылает байт из ячейки 4B23 в регистр AL. Затем он получает доступ к

байтам по адресам 4B24 и 4B25 и пересылает байт из ячейки 4B23 в регистр

AH. В результате регистр AX будет содержать 0124.

Нет необходимости в каких-либо специальных методах программирования

для получения четной или нечетной адресации, не обязательно также знать

является адрес четным или нет. Важно знать, что, во-первых, команды

обращения к памяти меняют слово при загрузке его в регистр так, что

получается правильная последовательность байт и, во-вторых, если программа

имеет частый доступ к памяти, то для повышения эффективности можно

определить данные так, чтобы они начинались по четным адресам.

Например, поскольку начало сегмента должно всегда находиться по

четному адресу, первое поле данных начинается также по четному адресу и

пока следующие поля определены как слова, имеющие четную длину, они все

будут начинаться на четных адресах. В большинстве случаев, однако,

невозможно заметить ускорения работы при четной адресации из-за очень

высокой скорости работы процессоров.

Ассемблер имеет директиву EVEN, которая вызывает выравнивание данных

и команд на четные адреса памяти.

 

 

ПРИМЕР МАШИННЫХ КОДОВ: ОПРЕДЕЛЕНИЕ РАЗМЕРА ПАМЯТИ

________________________________________________________________

 

В первом упражнении в данной главе проводилась проверка размера

памяти (RAM), которую имеет компьютер. BIOS (базовая система ввода/вывода)

в ROM имеет подпрограмму, которая определяет pазмер памяти. Можно

обратиться в BIOS по команде INT, в данном cлучае по прерыванию 12H. В

результате BIOS возвращает в регистр AX размер памяти в килобайтах.

Загрузите в память DEBUG и введите для INT 12H и RET следующие машинные

коды:

 

E CS:100 CD 12 CB

 

Нажмите R (и Return) для отображения содержимого регистров и первой

команды. Регистр IP содержит 0100, при этом высвечивается команда INT 12H.

Теперь нажмите T (и Return) несколько раз и просмотрите выполняемые

команды BIOS (отладчик показывает мнемокоды, хотя в действительности

выполняются машинные коды):

 

STI

PUSH DS

MOV AX,0040

MOV DS,AX

MOV AX,[0013]

POP DS

IRET

 

В этот момент регистр AX содержит размер памяти в шестнадцатиpичном

формате. Теперь введите еще раз команду T для выхода из BIOS и возврата в

вашу программу. На экране появится команда RET для машинного кода CB,

который был введен вами.

Требования языка ассемблера

Язык ассе́мблера — машинно-ориентированный язык низкого уровня с командами, обычно соответствующими командам машины, который может обеспечить дополнительные возможности вроде макрокоманд[1]; автокод, расширенный конструкциями языков программирования высокого уровня, такими как выражения, макрокоманды, средства обеспечения модульности программ. Команды языка ассемблера один к одному соответствуют командам процессора. Фактически, они и представляют собой более удобную для человека символьную форму записи — мнемокоды — команд и их аргументов. При этом одной команде языка ассемблера может соответствовать несколько вариантов команд процессора.[4]

 

Кроме того, язык ассемблера позволяет использовать символические метки вместо адресов ячеек памяти, которые при ассемблировании заменяются на вычисляемые ассемблером или компоновщиком абсолютные или относительные адреса, а также так называемые директивы (команды ассемблера, не переводимые в машинные команды процессора, а выполняемые самим ассемблером).

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

Каждая модель (или семейство) процессоров имеет свой набор — систему — команд и соответствующий ему язык ассемблера. Наиболее популярные синтаксисы языков ассемблера — Intel-синтаксис и AT&T-синтаксис.

Существуют компьютеры, реализующие в качестве машинного язык программирования высокого уровня (Форт, Лисп, Эль-76). Фактически, в таких компьютерах они выполняют роль языков ассемблера.

(Использование комментариев в программе улучшает ее

ясность, oсобенно там, где назначение набора команд

непонятно. Комментаpий всегда начинаются на любой строке

исходного модуля с символа точка с запятой (;) и ассемблер

полагает в этом случае, что все символы, находящиеся справа

от; являются комментарием. Комментарий может содержать

любые печатные символы, включая пробел.

Комментарий может занимать всю строку или следовать за

командой на той же строке, Основной формат кодирования команд ассемблера имеет

следующий вид:

 

[метка] команда [операнд(ы)]

 

Метка (если имеется), команда и операнд (если имеется)

pазделяются по крайней мере одним пробелом или символом

табуляции. Максимальная длина строки - 132 символа. Первым символом в метке должна быть буква или спецсимвол.

Ассемблер не делает различия между заглавными и строчными

буквами. Максимальная длина метки - 31 символ. Примеры

меток: COUNT, PAGE25, $E10. Рекомендуется использовать

описательные и смысловые метки. Имена регистров, например,

AX, DI или AL являются зарезервированными и используются

только для указания соответствующих регистров.)

Директивы

Ассемблер имеет ряд операторов, которые позволяют упpавлять процессом

ассемблирования и формирования листинга. Эти операторы называются

псевдокомандами или директивами. Они действуют только в процессе

ассемблирования программы и не генерируют машинных кодов. Большинство

директив показаны в следующих разделах. В гл.24 подробно описаны все

директивы ассемблера и приведено более чем достаточно соответствующей

информации. Гл.24 можно использовать в качестве справочника.

 

 

Директивы управления листингом: PAGE и TITLE

----------------------------------------------

Ассемблер содержит ряд директив, управляющих форматом печати (или

листинга). Обе директивы PAGE и TITLE можно использовать в любой

программе.

 

 

Д и р е к т и в а PAGE. В начале программы можно указать количество

строк, распечатываемых на одной странице, и максимальное количество

символов на одной строке. Для этой цели cлужит директива PAGE. Следующей

директивой устанавливается 60 строк на страницу и 132 символа в строке:

 

PAGE 60,132

 

Количество строк на странице может быть в пределах от 10 до 255, а

символов в строке - от 60 до 132. По умолчанию в ассемблере установлено

PAGE 66,80.

Предположим, что счетчик строк установлен на 60. В этом случае

ассемблер, распечатав 60 строк, выполняет прогон листа на начало следующей

страницы и увеличивает номер страницы на eдиницу. Кроме того можно

заставить ассемблер сделать прогон листа на конкретной строке, например, в

конце сегмента. Для этого необходимо записать директиву PAGE без

операндов. Ассемблер автоматически делает прогон листа при обработке

диpективы PAGE.

 

 

Д и р е к т и в а TITLE. Для того, чтобы вверху каждой страницы

листинга печатался заголовок (титул) программы, используется диpектива

TITLE в следующем формате:

 

TITLE текст

 

Рекомендуется в качестве текста использовать имя программы, под

которым она находится в каталоге на диске. Например, если программа

называется ASMSORT, то можно использовать это имя и описательный

комментарий общей длиной до 60 символов:

 

TITLE ASMSORT - Ассемблерная программа сортировки имен

 

В ассемблере также имеется директива подзаголовка SUBTTL, которая

может оказаться полезной для очень больших программ, содержащих много

подпрограмм.

 

 

Директива SEGMENT

-------------------

Любые ассемблерные программы содержат по крайней мере один сегмент -

сегмент кода. В некоторых программах используется сегмент для стековой

памяти и сегмент данных для определения данных. Асcемблерная директива для

описания сегмента SEGMENT имеет следующий формат:

 

Имя Директива Операнд

имя SEGMENT [параметры]

.

.

.

имя ENDS

 

Имя сегмента должно обязательно присутствовать, быть уникальным и

соответствовать соглашениям для имен в ассемблере. Директива ENDS

обозначает конец сегмента. Обе директивы SEGMENT и ENDS должны иметь

одинаковые имена. Директива SEGMENT может содержать три типа параметров,

определяющих выравнивание, объединение и класс.

 

1. В ы р а в н и в а н и е. Данный параметр определяет границу

начала сегмента. Обычным значением является PARA, по которому сегмент

устанавливается на границу параграфа. В этом случае начальный адрес

делится на 16 без остатка, т.е. имеет шест. адрес nnn0. В случае

отсутствия этого операнда ассемблер принимает по умолчанию PARA.

2. О б ъ е д и н е н и е. Этот элемент определяет объединяется

ли данный сегмент с другими сегментами в процессе компановки после

ассемблирования (пояснения см. в следующем разделе "Компановка

программы"). Возможны следующие типы объединений: STACK, COMMON,

PUBLIC, AT выражение и MEMORY. Сегмент стека определяется следующим

образом:

имя SEGMENT PARA STACK

 

Когда отдельно ассемблированные программы должны объединяться

компановщиком, то можно использовать типы: PUBLIC, COMMON и MEMORY. В



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 325; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.218.129.100 (0.292 с.)