Logo GenDocs.ru

Поиск по сайту:  


Загрузка...

Ответы на билеты по дисциплине Организация ЭВМ и систем - файл 1.doc


Ответы на билеты по дисциплине Организация ЭВМ и систем
скачать (1876 kb.)

Доступные файлы (1):

1.doc1876kb.16.11.2011 22:22скачать

содержание
Загрузка...

1.doc

1   2   3   4   5   6   7   8
Реклама MarketGid:
Загрузка...
^

Интерфейс SCSI


Интерфейс SCSI был разработан в конце 1970-х годов организацией Shugart Associates. Первоначально известный под названием SASI (Shugart Associates System Interface), он после стандартизации в 1986 году уже под именем SCSI (читается «скази») стал одним из промышленных стандартов для подключения периферийных устройств - винчестеров, стримеров, сменных жестких и магнитооптических дисков, сканеров, CD-ROM и CD-R, DVD-ROM и тому подобное К шине SCSI можно подключить до восьми устройств, включая основной контроллер SCSI (или хост-адаптер).

Интерфейс SCSI является параллельным и физически представляет собой плоский кабель с 25-, 50-, 68-контактными Разъемами для подключения периферийных устройств. Шина SCSI содержит восемь линий данных, сопровождаемых линией контроля четности, и девять управляющих линий. Стандарт SCSI определяет два способа передачи сигналов: одно-полярный, или асимметричный (Single ended), и дифференциальный (Differential). В первом случае имеется один провод с нулевым потенциалом («земля»), относительно которого передаются сигналы по линиям данных с уровнями сигналов, соответствующими ТТЛ-логике. При дифференциальной передаче сигнала для каждой линии данных выделено два провода, и сигнал на этой линии получается вычитанием потенциалов на их выходах. При этом достигается лучшая помехозащищенность, что позволяет увеличить длину кабеля.

Для интерфейса SCSI необходимо наличие терминаторов (согласующих сопротивлений, которые поглощают сигналы на концах кабеля и препятствуют образованию эха).

Устройства SCSI также соединяются в виде цепочки (daisy chain), причем каждое устройство SCSI имеет свой адрес (SCSI ID) в диапазоне от 0 до 7 (или от 0 до 15). В качестве адреса платы контроллера обычно используется наибольшее значение SCSI ID - 7(15), адрес загрузочного диска SCSI ID равен 0, а второго диска - 1. Обмен между устройствами на магистрали SCSI определяется нормированным списком команд (Common Command Set, CCS). Программное обеспечение для интерфейса SCSI не оперирует физическими характеристиками накопителя (то есть числом цилиндров, головок и так далее ), а имеет дело только с логическими блоками данных, поэтому в одной SCSI-цепочке могут быть размещены, например, сканер, жесткий диск и накопитель CD-R.

Опрос устройств производится контроллером SCSI сразу после включения питания. При этом для устройств SCSI реализовано автоконфигурирование устройств (Plug-and-play) по протоколу SCAM (SCSI Configured AutoMagically), в котором значения SCSI ID выделяются автоматически. Для стандартизированного управления SCSI-устройствами наиболее широко применяется программный интерфейс ASPI (Advanced SCSI Programming Interface).


^ 26. Организация взаимодействия элементов ЭВМ под управлением ЦП. Цикл выполнения команд. Циклы шины. Система прерываний. Типы прерываний

При выполнении каждой команды ЭВМ проделывает определенные стандартные действия:

1) согласно содержимому счетчика адреса команд, считывается очередная команда программы (ее код обычно заносится на хранение в специальный регистр УУ, который носит название регистра команд);

2) счетчик команд автоматически изменяется так, чтобы в нем содержался адрес следующей команды (в простейшем случае для этой цели достаточно к текущему значению счетчика прибавить некоторую константу, определяющуюся длиной команды);

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

Затем во всех случаях, за исключением команды останова или наступления прерывания, все описанные действия циклически повторяются.

После выборки команды останова ЭВМ прекращает обработку программы. Для выхода из этого состояния требуется либо запрос от внешних устройств, либо перезапуск машины.

Цикл шины - 4 такта процессора. То есть, например, при частоте 5 МГц цикл шины длится 800 наносекунд.

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

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

Т.е. это процесс, временно переключающий микропроцессор на выполнение другой программы с последующим возвратом к прерванной программе.

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

Адрес программы-обработчика прерывания вычисляется по таблице векторов прерываний.

Механизм прерываний поддерживается на аппаратном уровне.

Классификация прерываний

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

аппаратные - возникают как реакция микропроцессора на физический сигнал от некоторого устройства (клавиатура, системные часы, клавиатура, жесткий диск и т.д.), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени;

программные - вызываются искусственно с помощью соответствующей команды из программы (int), предназначены для выполнения некоторых действий операционной системы, являются синхронными;

исключения - являются реакцией микропроцессора на нестандартную ситуацию, возникшую внутри микропроцессора во время выполнения некоторой команды программы (деление на ноль, прерывание по флагу TF (трассировка)).

Общая классификация прерываний

внешние - вызываются внешними по отношению к микропроцессору событиями (по существу - это группа аппаратных прерываний) Вложенных прерываний нет.

внутренние - возникают внутри микропроцессора во время вычислительного процесса (по существу - это исключительные ситуации и программные прерывания).


^ 27. Система прерываний ЭВМ. Назначение, роль и место в общей организации управления и взаимодействия в ЭВМ. Типы прерываний.

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

Т.е. это процесс, временно переключающий микропроцессор на выполнение другой программы с последующим возвратом к прерванной программе.

Нажимая клавишу на клавиатуре, мы инициируем немедленный вызов программы, которая распознает клавишу, заносит ее код в буфер клавиатуры, из которого он считывается другой программой. Т.е. на некоторое время микропроцессор прерывает выполнение текущей программы и переключается на программу обработки прерывания, так наз. обработчик прерывания. После того, как обработчик прерывания завершит свою работу, прерванная программа продолжит выполнение с точки, где было приостановлено ее выполнение. Адрес программы-обработчика прерывания вычисляется по таблице векторов прерываний. Механизм прерываний поддерживается на аппаратном уровне.

Классификация прерываний

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

• аппаратные - возникают как реакция микропроцессора на физический сигнал от некоторого устройства (клавиатура, системные часы, клавиатура, жесткий диск и т.д.), по времени возникновения эти прерывания асинхронны, т.е. происходят в случайные моменты времени;

• программные - вызываются искусственно с помощью соответствующей команды из программы (int), предназначены для выполнения некоторых действий операционной системы, являются синхронными;

• исключения - являются реакцией микропроцессора на нестандартную ситуацию, возникшую внутри микропроцессора во время выполнения некоторой команды программы (деление на ноль, прерывание по флагу TF (трассировка)).

Общая классификация прерываний

• внешние - вызываются внешними по отношению к микропроцессору событиями

(по существу - это группа аппаратных прерываний) Вложенных прерываний нет!

• внутренние - возникают внутри микропроцессора во время вычислительного процесса (по существу - это исключительные ситуации и программные прерывания).

Внешние прерывания возникают по сигналу какого-нибудь внешнего устройства.

Внешние прерывания подразделяются на немаскируемые и маскируемые.

В связи с тем, что существуют два специальных внешних сигнала среди входных сигналов процессора, при помощи которых можно прервать выполнение текущей программы и тем самым переключить работу центрального процессора. Это сигналы NMI (no mask interrupt, немаскируемое прерывание) и INTR (interrupt request, запрос на прерывание).

Маскируемые прерывания генерируются контроллером прерываний по заявке определенных периферийных устройств. Контроллер прерываний поддерживает восемь уровней (линий) приоритета; к каждому уровню “привязано” одно периферийное устройство. Именно маскируемые прерывания часто называют аппаратными прерываниями.

В ПК, начиная с IBM PC AT, построенных на базе микропроцессора i80286, используются два контроллера прерываний i8259A; они соединяются последовательно каскадным образом, что увеличивает количество внешних источников прерываний до 15 (каждая по 8).

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

Обработка прерывания в реальном режиме

производится в три этапа:

1) прекращение выполнения текущей программы;

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

Обязательными для сохранения являются регистры cs, ip, flags (пара CS:IP содержит адрес команды, с которой необходимо начать выполнение после возврата, flags - состояние флагов после выполнения последней команды прерванной программы).

!!! Эти регистры сохраняются микропроцессором автоматически. Сохранение остальных регистров - должно обеспечиваться программистом !!! Наиболее удобным местом хранения регистров является стек.

После сохранения регистров в стеке микропроцессор сбрасывает бит флага IF (т.е.=0)

2) переход к выполнению и выполнение программы обработки прерывания;

Здесь определяется источник прерывания и вызывается соответствующий обработчик прерывания.

В реальном режиме микропроцессора допускается 256 источников - по кол-ву элементов таблицы векторов прерываний.

Структура элемента:

• 2 байта - значение смещения начала программы-обработчика прерывания от начала кодового сегмента

• 2 байта - значение базового адреса сегмента, в котором находится программа-обработчик.

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

смещение эл-та таблицы векторов прерываний = N * 4 Полный размер таблицы ? 4*256=1024 Итак на втором этапе микропроцессор

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

2. Помещает первые два байта в регистр IP

3. Помещает вторые два байта в регистр CS

4. Передыет управление по адресу CS:IP

Далее выполняется сама программа обработки прерывания. (Она тоже может быть прервана поступлением запроса от более приоритетного источника. Все источники прерывания имеют приоритеты.)

3) возврат управления прерванной программе.

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


28. Обслуживание запросов внешних устройств. Аппаратные (асинхронные) прерывания. Контроллер прерываний PIC. Линии запросов на прерывание - IRQ. Исключительные ситуации ЦП.


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

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

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

- считывание признака готовности ( например MOV C,bit )

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

Таким способом можно проверять как выделенные биты портов ввода/вывода, так и состояния некоторых внутренних регистров, связанных с асинхронными процессами, например бит переполнения таймера, бит готовности последовательного порта.

асинхронные или внешние (аппаратные) — события, которые исходят от внешних источников (например, периферийных устройств) и могут произойти в любой произвольный момент: сигнал от таймера, сетевой карты или дискового накопителя, нажатие клавиш клавиатуры, движение мыши. Факт возникновения в системе такого прерывания трактуется как запрос на прерывание (англ. Interrupt request, IRQ);

Контроллер прерываний (англ. Programmable Interrupt Controller, PIC) — микросхема или встроенный блок процессора, отвечающий за возможность последовательной обработки запросов на прерывание от разных устройств.

Как правило представляет собой электронное устройство, иногда выполненное как часть самого процессора или же сложных микросхем его обрамления, входы которого присоединены электрически к соответствующим выходам различных устройств. Номер входа контроллера прерываний обозначается «IRQ». Следует отличать этот номер от приоритета прерывания, а также от номера входа в таблицу векторов прерываний (INT). Так, например, в IBM PC в реальном режиме работы (в этом режиме работает MS-DOS) процессора прерывание от стандартной клавиатуры использует IRQ 1 и INT 9.

В первоначальной платформе IBM PC используется очень простая схема прерываний. Контроллер прерываний представляет из себя простой счётчик, который либо последовательно перебирает сигналы разных устройств, либо сбрасывается на начало при нахождении нового прерывания. В первом случае устройства имеют равный приоритет, во втором устройства с меньшим (или большим при обратном счёте) обладают большим приоритетом

Сигнал, отправляемый устройством для привлечения ресурсов процессора в момент, когда оно готово для приема или передачи данных. Каждое устройство отправляет свои запросы на прерывание по отдельной аппаратной линии, имеющей номер от 0 до 15. Линия запроса на прерывание (IRQ), занятая устройством, должна быть уникальной. Запрос на прерывание называется также IRQ.

Прерывание представляет собой временную паузу в основном потоке обработки на компьютере, во время которой могут выполняться какие-либо служебные или фоновые задачи. Прерывания могут запрашиваться оборудованием (например, клавиатурой, мышью) или программным обеспечением.

Физическое соединение между внешними устройствами и контроллером прерываний. Линия IRQ используется для привлечения внимания системы, когда внешнее устройство нуждается в обработке.


^ 29. Программные (синхронные) прерывания, команды прерывания МП. Сервисы BIOS, как программные прерывания.


Прерывание (англ. interrupt) — сигнал, сообщающий процессору о наступлении какого-либо события. При этом выполнение текущей последовательности команд приостанавливается и управление передаётся обработчику прерывания, который реагирует на событие и обслуживает его, после чего возвращает управление в прерванный код.

синхронные или внутренние — события в самом процессоре как результат нарушения каких-то условий при исполнении машинного кода: деление на ноль или переполнение, обращение к недопустимым адресам или недопустимый код операции

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

Например, по команде INT 13h могут быть выполнены следующие функции:

00h - сброс дисковой системы;

0lh - определение состояния дисковой системы (успешное завершение, некорректная команда, не найдена адресная метка и т.д.);

02h - чтение секторов в основную память;

03h - запись секторов из основной памяти;

04h - контроль секторов (есть ошибка - нет ошибки);

05h- форматирование дорожки;

06h - для жесткого диска - форматирование дорожки с установкой флагов плохих секторов;

07h - для жесткого диска - форматирование диска, начиная с указанной дорожки;

08h - определение типа и текущих параметров диска...

и т.д.

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

При выполнении команды INT номер функции должен содержаться в регистре АН микропроцессора. Остальные регистры должны включать необходимые для этой функции параметры. Например, для функции 02h остальные регистры микропроцессора должны содержать:

AL - число читаемых секторов;

СН - номер дорожки, на которой расположены читаемые сектора;

CL - номер сектора;

DH - номер головки;

DL - номер дисковода;

ES:BX - адрес буфера для чтения.

В результате выполнения этой функции при возникновении ошибки флаг CF устанавливается в 1; в регистр AL заносится число считанных секторов, в регистр АН записывается код состояния, сформированный после окончания операции:

00 - успешное завершение;

01 - некорректная команда;

02 - адресная метка не найдена;

FF - сбой операции опроса (для жесткого диска).

Кроме команд INT и IRET в IBM PC, с прерываниями работают команды CLI (запрещение маскируемых прерываний) и STI (отмена запрета прерывания).

Сервисы и прерывания BIOS

Внутренние прерывания:

♦ Int 00h — деление на 0;

♦ Int 01h — пошаговый режим;

♦ Int 03h — точка останова;

♦ Int 04h — переполнение;

♦ Int 06h — недопустимая команда 286+;

♦ Int 07h — вызов отсутствующего NPU.

Аппаратные прерывания:

♦ Int 02h — немаскируемое прерывание;

♦ Int 08h - таймер 8253/8254;

♦ Int 09h — клавиатура;

♦ Int 0Ah - IRQ2/9;

♦ Int 0Bh- IRQ3;

♦ Int 0Ch-IRQ4;

♦ Int 0Dh — IRQ5;

♦ Int 0Eh — IRQ6 — контроллер гибких дисков;

♦ Int 0Fh-IRQ7;

♦ Int 70h - CMOS-таймер;

♦ Int 7Ih — IRQ9 (перенаправлено на Int 0Ah);

♦ Int 72h- IRQ10;

♦ Int 73h — IRQ11;

♦ Int 74h — IRQ 12 (контроллер мыши PS/2);

♦ Int 75h — IRQ 13 — исключение сопроцессора;

♦ Int 76h — IRQ14— контроллер жестких дисков;

♦ Int 77h-IRQ15.

ПРИМЕЧАНИЕ

Прерывания Int 70h-77h имеют место только в AT.

Функции ROM BIOS (16-битные сервисы):

♦ Int 05h (FOOO:FF54h) - печать экрана;

♦ Int 10h — видеосервис;

♦ Int llh — чтение списка оборудования (слово из BDA 0040:001 0h), возвращает в АХ:

• биты 15:14 — число обнаруженных LPT-портов: 00 —0,... 11 — 3;

• бит 13 — резерв;

• бит 12 — обнаружен игровой адаптер;


482 Глава 12. Архитектурные компоненты IBM PC-совместимого компьютера

• биты 11:9 — число обнаруженных СОМ-портов: 000 —0,... 111 — 7;

• бит 8 — наличие контроллера DMA;

• биты 7:6 — число обнаруженных НГМД: 00 — 1,... 11 — 4;

• биты 5:4 — активный видеорежим: 00 — резерв, 10 — 80-колоночный цветной, 01 — 40-колоночный цветной, 11 — монохромный;

• биты 3:2 — размер ОЗУ на системной плате (теперь обычно 00);

• бит 1 — присутствие математического сопроцессора;

• бит 0 — присутствие дисководов;

♦ Int 12h — размер непрерывной памяти;

♦ Int 13h — дисковый сервис (блочный ввод-вывод);

♦ Int 14h — обслуживание СОМ-портов;

♦ Int 15h — АТ-функции (системный сервис, функции определяются значени

ем АН/АХ):

• 00-ОЗЬ — управление и обмен данными с кассетным магнитофоном (были когда-то и такие «стриммеры»!) на старых PC;

• 4fh — перехват клавиатуры;

• 53xxh — сервисы управления потреблением АРМ (Advanced Power Management);

• 8300h — запуск таймера, устанавливающего флаг в заданной ячейке;

• 830 lh — сброс того же таймера;

• 84h — джойстик (см. п. 8.6);

• 86h — программируемая задержка;

• 87h — перемещение блока расширенной памяти;

• 88h — получение размера расширенной памяти;

• 89h — переключение в режим V86;

• COh — получение системной конфигурации, при успешном выполнении (CF=0, AH=0) ES:BX указывает на таблицу данных конфигурации;

• 80-82h, 85h, 90h, 91h — функции многозадачных ОС (BIOS устанавливает

заглушки);

♦ Int 16h — клавиатурный ввод-вывод;

♦ Int 17h — обслуживание LPT-портов;

♦ Int 18h — процедура восстановления при неудаче начальной загрузки (прежде - ROM-Basic);

♦ Int 19h — начальная загрузка (вызов процедуры Bootstrap);

♦ Int lAh— системное время, дата, будильник и 16-битные вызовы сервисов PCI;

♦ Int IBh — обработчик нажатия клавиш Ctrl+Break;


12.8. Сервисы и прерывания BIOS 483

♦ Int I C h — User Timer Interrupt, процедура, вызываемая обработчиком I n t 0 8 h каждые 55 мс; BIOS устанавливает простую заглушку (IRET), но программы могут перехватывать это прерывание; на время отработки этой процедуры все аппаратные прерывания запрещены (кроме NMI).

♦ Int ЗЗп — поддержка мыши;

♦ Int 4Ah — обработчик будильника пользователя, установленного функцией

BIOS Int lAh(6); прерывание вызывается асинхронно, так что при возврате

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

входе; BIOS ставит заглушку (IRET);


♦ Int 67h - EMS-функции.

Указатели на таблицы:

♦ Int IDh — видеопараметры;

♦ Int lEh — параметры дискет;

♦ Int IFh — знакогенератор СGA;

♦ Int 41h — параметры HDD 0;

♦ Int 46h — параметры HDD


^ 30. Процедуры обработчиков прерывания Таблицы дескрипторов (векторов) прерываний в защищенном и реальном режимах работы процессора INTEL.

Обработчик прерываний (или процедура обслуживания прерываний) — специальная процедура, вызываемая по прерыванию для выполнения его обработки. Обработчики прерываний могут выполнять множество функций, которые зависят от причины, которая вызвала прерывание.


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

Вектор прерывания — закреплённый за устройством номер, который идентифицирует соответствующий обработчик прерываний. Векторы прерываний объединяются в таблицу векторов прерываний. Местоположение таблицы зависит от типа и режима работы процессора.

В защищённом режиме все прерывания разделяются на два типа - обычные прерывания и исключения (exception - исключение, особый случай).

Обычное прерывание инициируется командой INT (программное прерывание) или внешним событием (аппаратное прерывание). Перед передачей управления процедуре обработки обычного прерывания флаг разрешения прерываний IF сбрасывается и прерывания запрещаются.

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

В защищённом режиме прерывания могут приводить к переключению задач. О задачах и мультизадачности мы будем говорить в следующей главе.

Теперь перейдём к рассмотрению механизма обработки прерываний и исключений в защищённом режиме.

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

Таблица прерываний защищённого режима называется дескрипторной таблицей прерываний IDT (Interrupt Descriptor Table).

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

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

Для обработки прерываний в реальном режиме процессор использует таблицу векторов прерываний. Эта таблица располагается в самом начале оперативной памяти, т.е. её физический адрес - 00000.

Таблица векторов прерываний реального режима состоит из 256 элементов по 4 байта, таким образом её размер составляет 1 килобайт. Элементы таблицы - дальние указатели на процедуры обработки прерываний. Указатели состоят из 16-битового сегментного адреса процедуры обработки прерывания и 16-битового смещения. Причём смещение хранится по младшему адресу, а сегментный адрес - по старшему.

Когда происходит программное или аппаратное прерывание, текущее содержимое регистров CS, IP а также регистра флагов FLAGS записывается в стек программы (который, в свою очередь, адресуется регистровой парой SS:SP). Далее из таблицы векторов прерываний выбираются новые значения для CS и IP, при этом управление передаётся на процедуру обработки прерывания.

Что же касается аппаратных маскируемых прерываний, то в компьютере IBM AT и совместимых с ним существует всего шестнадцать таких прерываний, обозначаемых IRQ0-IRQ15. В реальном режиме для обработки прерываний IRQ0-IRQ7 используются вектора прерываний от 08h до 0Fh, а для IRQ8-IRQ15 - от 70h до 77h.


^ 31. Организация ввода-вывода. Принципы обмена информацией ЦП с внешними устройствами. Порты ввода-вывода. Устройства ввода: - клавиатура, мышь. Динамик PC.


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

^ Порты ввода/вывода - это адреса в памяти, используемые процессором для прямого обращения к устройству, которое посылает процессору прерывание.

Обмен командами между процессором и устройством происходит через адрес порта ввода/вывода, который представлен как шестнадцатеричное число. Никакие два устройства не могут использовать один и тот же порт. Многое устройства используют несколько портов, занимая диапазон шестнадцатеричных адресов.

^ Устройства ввода-вывода делятся на два типа: блок-ориентированные устройства и байт-ориентированные устройства. Блок-ориентированные устройства хранят информацию в блоках фиксированного размера, каждый из которых имеет свой собственный адрес. Самое распространенное блок-ориентированное устройство - диск. Байт-ориентированные устройства не адресуемы и не позволяют производить операцию поиска, они генерируют или потребляют последовательность байтов. Примерами являются терминалы, строчные принтеры, сетевые адаптеры. Внешнее устройство обычно состоит из механического и электронного компонента. Электронный компонент называется контроллером устройства или адаптером. Механический компонент представляет собственно устройство. Некоторые контроллеры могут управлять несколькими устройствами. Если интерфейс между контроллером и устройством стандартизован, то независимые производители могут выпускать совместимые как контроллеры, так и устройства.

Операционная система обычно имеет дело не с устройством, а с контроллером. Контроллер, как правило, выполняет простые функции, например, преобразует поток бит в блоки, состоящие из байт, и осуществляют контроль и исправление ошибок. Каждый контроллер имеет несколько регистров, которые используются для взаимодействия с центральным процессором. В некоторых компьютерах эти регистры являются частью физического адресного пространства. В таких компьютерах нет специальных операций ввода-вывода. В других компьютерах адреса регистров ввода-вывода, называемых часто портами, образуют собственное адресное пространство за счет введения специальных операций ввода-вывода (например, команд IN и OUT в процессорах i86).

ОС выполняет ввод-вывод, записывая команды в регистры контроллера. Например, контроллер гибкого диска IBM PC принимает 15 команд, таких как READ, WRITE, SEEK, FORMAT и т.д. Когда команда принята, процессор оставляет контроллер и занимается другой работой. При завершении команды контроллер организует прерывание для того, чтобы передать управление процессором операционной системе, которая должна проверить результаты операции. Процессор получает результаты и статус устройства, читая информацию из регистров контроллера.

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

Передача информации с периферийного устройства в ЭВМ называется операцией ввода, а передача из ЭВМ в ПУ - операцией вывода.

Производительность и эффективность ЭВМ определяются не только возможностями ее процессора и характеристиками ОП, но и составом ПУ, их техническими данными и способами организации их совместной работы с ЭВМ.

Клавиатура — устройство, представляющее собой набор кнопок (клавиш), предназначенных для управления каким-либо устройством или для ввода информации. Как правило, кнопки нажимаются пальцами рук. Манипулятор «мышь» — одно из указательных устройств ввода , обеспечивающих интерфейс пользователя с компьютером. Динамик ПК (англ. PC speaker) — простейшее устройство воспроизведения звука, применявшееся в IBM PC и совместимых ПК. Звучит довольно грубо и может раздражать некоторых пользователей. До появления недорогих звуковых плат динамик являлся основным устройством воспроизведения звука.


^ 32. Видеоподсистема ПЭВМ. Принципы формирования изображений. Элементы видеоподсистемы: - монитор, видеоконтроллер, видеопамять. Видеорежимы.

Видеоадаптеры EGA и VGA можно условно разделить на шесть логических блоков:

Видеопамять. В видеопамяти размещаются данные, отображаемые адаптером на экране дисплея. Для видеоадаптеров EGA и VGA видеопамять, как правило, имеет объем 256К байт. На некоторых моделях Super VGA и XGA объем видеопамяти может быть увеличен до 1М байт. Видеопамять находится в адресном пространстве процессора и программы могут непосредственно производить с ней обмен данными. Физически видеопамять разделена на четыре банка или цветовых слоя, разделяющих единое адресное пространство. Графический контроллер. Посредством его происходит обмен данными между центральным процессором компьютера и видеопамятью. Аппаратура графического контроллера позволяет производить над данными, поступающими в видеопамять, и над данными, расположенными в регистрах-защелках (регистры-защелки описаны ниже) простейшие логические опрерации (И, ИЛИ, ИСКЛЮЧАЮЩЕЕ ИЛИ, циклический сдвиг). Последовательный преобразватель. Выбирает из видеопамяти один или несколько байт, преобразует их в последовательный поток битов и затем передает контроллеру атрибутов. Контроллер ЭЛТ. Генерирует временные синхросигналы, управляющие ЭЛТ. Контроллер атрибутов. Преобразует информацию о цветах из формата, в котором она хранится в видеопамяти, в формат, необходимый для ЭЛТ. Преобразование цветов осуществляется в соответствии с таблицей цветовой палитры (Color Look-up Table). Модифицируя таблицу цветовой палитры, можно выбирать 16 цветов, оддерживаемых видеоадаптером EGA из 64 цветов, которые может отображать цветной улучшенный дисплей. Синхронизатор. Управляет всеми временными параметрами видеоадаптера. Синхронизатор также управляет доступом процессора к цветовым слоям видеоадаптера.

VGA (англ. Video Graphics Array) — стандарт мониторов и видеоадаптеров. VGA являлся последним стандартом, которому следовало большинство производителей видеоадаптеров. Видеоадаптер VGA подключается как к цветному, так и к монохромному монитору, при этом доступны все стандартные видеорежимы. Частота обновления экрана во всех стандартных режимах, кроме 640?480, — 70 Гц, в режиме 640?480 — 60 Гц. Видеоадаптер имеет возможность одновременно выводить на экран 256 различных цветов, каждый из которых может принимать одно из 262 144 различных значений (отводится по 6 битов на красный, зелёный и синий компоненты). Объём видеопамяти VGA — 256 кБ.

Видеоадаптер VGA, в отличие от предыдущих видеоадаптеров IBM (MDA, CGA, EGA), использует аналоговый сигнал для передачи цветовой информации. Переход на аналоговый сигнал был обусловлен необходимостью сокращения числа проводов в кабеле. Также аналоговый сигнал давал возможность использовать VGA-мониторы с последующими видеоадаптерами, которые могут выводить большее количество цветов. Официальным последователем VGA стал стандарт IBM XGA, фактически же он был замещен различными расширениями к VGA, известными как SVGA.

Видеоконтроллер (англ. Video Display Controller, VDC) — специализированная микросхема, являющаяся главным компонентом схемы формирования видеоизображения в компьютерах и игровых консолях. Некоторые видеоконтроллеры также имеют дополнительные возможности, например, генератор звука. Микросхемы видеоконтроллеров применялись в основном в домашних компьютерах и игровых системах 1980-х годов.

Видеопамять — часть оперативной памяти, отведённая для хранения данных, которые используются для формирования изображения на экране монитора.

При этом в видеопамяти может содержаться как непосредственно растровый образ изображения (экранный кадр), так и отдельные фрагменты как в растровой (текстуры), так и в векторной (многоугольники, в частности [треугольник]и) формах.

Существует выделенная оперативная память для видеокарт, также называемая «Видеопамятью».

Монитор (устройство), дисплей — устройство для показа изображений, порождаемых другими устройствами (например, компьютерами).

Видеорежимы xxxGA (video mode xxxGA) — режимы работы видеокарт, определяющие число выводимых на экран монитора точек (пикселов, pixels) изображения по горизонтали и вертикали. Известны следующие режимы xxxGA:

QVGA (Quarter Video Graphics Array) —320х240;HVGA (Half-size Video Graphics Array) — 640х240;VGA(27) (Video Graphics Array) — 640х480;SVGA(28) (Super Video Graphics Array) — 800х600;XGA (eXtended Graphics Array) — 1024х768;XGA-W (eXtended Graphics Array Wide) — 1280x768;WXGA (Wide Extended Graphics Array) — 1366х768;QuadVGA (Quad Video Graphics Array) — 1280х960;

SXGA (Super-eXtended Graphics Array) — 1280х1024;SXGA+ (Super eXtended Graphics Array Plus) — 1400x1050;WSXGA+ (Wide Super eXtended Graphics Array Plus) — 1680x1050;UXGA (Ultra eXtended Graphics Array) — 1600x1200;WUXGA (Wide Ultra eXtended Graphics Array) — 1920x1200; QXGA (Quad eXtended Graphics Array) — 2048х1536;

^ Электронно-лучевая трубка

В большинстве дисплеев в качестве устройств отображения используются электронно-лучевая трубка (ЭЛТ), газоразрядная или жидкокристалическая панель. Мы будем рассматривать только ЭЛТ.

ЭЛТ состоит из электронной пушки (или из трех пушек для цветного дисплея), отклоняющей системы и экрана, покрытого слоем люминофора. Все эти устройства помещены в вакумный баллон. Электронная пушка служит источником электронов, направляемых при помощи отклоняющей системы в нужную часть экрана, где электроны взаимодействуют с покрытием экрана. В результате взаимодействия испускается свет. Изображение на ЭЛТ формируется за счет пробега луча электронов слева направо по горизонтальным линиям экрана. Чтобы глаз не замечал смены кадров, пробег луча по всему экану должен происходить с частотой, большей чем 25Гц.

Луч электронов начинает пробегать по экрану с верхнего левого угла до правого верхнего угла. Когда луч доходит до правой стороны, он гасится и перемещается на следующую оризонтальную линию, находящуюся под предыдущей линией. После того, как луч пробежит по всему экрану, он гасится и перемещается в верхний левый угол. Затем процесс повторяется снова.


^ 33. Периферийное оборудование ПЭВМ. Обзор основных устройств: - принципы действия, функциональное назначение, интерфейс с компьютером.

Line Print Terminal, LPT — международный стандарт параллельного интерфейса для подключения периферийных устройств персонального компьютера. В основном используется для подключения к компьютеру принтера, сканера и других внешних устройств (часто использовался для подключения внешних устройств хранения данных), однако может применяться и для других целей (организация связи между двумя компьютерами, подключение каких-либо механизмов телесигнализации и телеуправления).

USB (англ. Universal Serial Bus — «универсальная последовательная шина»,) — последовательный интерфейс передачи данных для среднескоростных и низкоскоростных периферийных устройств в вычислительной технике. Благодаря встроенным линиям питания USB позволяет подключать периферийные устройства без собственного источника питания (максимальная сила тока, потребляемого устройством по линиям питания шины USB, не должна превышать 500 мА).

Сканер - устройство, которое анализируя какой-либо объект (обычно изображение, текст), создаёт цифровую копию изображения объекта.

В зависимости от способа сканирования объекта и самих объектов сканирования существуют следующие виды сканеров:

Планшетные (наиболее распространённый вид сканеров, поскольку обеспечивает максимальное удобство для пользователя — высокое качество и приемлемую скорость сканирования. Представляет собой планшет, внутри которого под прозрачным стеклом расположен механизм сканирования), ручные, листопротяжные, книжные и другие.

^ Принцип действия планшетных сканеров:

Сканируемый объект кладется на стекло планшета сканируемой поверхностью вниз. Под стеклом располагается подвижная лампа, движение которой регулируется шаговым двигателем.

Свет, отраженный от объекта, через систему зеркал попадает на чувствительную матрицу (англ. CCD — Couple-Charged Device), далее на аналого-цифровой преобразователь и передается в компьютер. За каждый шаг двигателя сканируется полоска объекта, которые потом объединяются программным обеспечением в общее изображение.

^ Характеристики сканеров:

Оптическое разрешение - Сканер снимает изображение не целиком, а по строчкам. По вертикали планшетного сканера движется полоска светочувствительных элементов и снимает по точкам изображение строку за строкой. Чем больше светочувствительных элементов у сканера, тем больше точек он может снять с каждой горизонтальной полосы изображения. Это и называется оптическим разрешением. Обычно его считают по количеству точек на дюйм — dpi (dots per inch). Сегодня считается нормой уровень разрешение не менее 600 dpi.

Скорость работы - В отличие от принтеров, скорость работы сканеров указывают редко, поскольку она зависит от множества факторов. Иногда указывают скорость сканирования одной линии в миллисекундах.

Глубина цвета - Измеряется количеством оттенков, которые устройство способно распознать. 24 бита соответствует 16 777 216 оттенков. Современные сканеры выпускают с глубиной цвета 24, 30, 36, 48 бит.

Принтер – это устройство печати цифровой информации на твёрдый носитель, обычно на бумагу.

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

^ Лазерные принтеры. Лазерные принтеры обеспечивают высокое качество печати, не уступающее, а во многих случаях и превосходящее полиграфическое. Они отличаются также высокой скоростью печати, которая измеряется в страницах в минуту (ррт – page per minute). Как и в матричных принтерах, итоговое изображение формируется из отдельных точек.

^ Принцип действия лазерных принтеров следующий:

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

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

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

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

^ К основным параметрам лазерных принтеров относятся:

разрешающая способность, dpi (dots per inch – точек на дюйм);

производительность (страниц в минуту);

формат используемой бумаги;

объем собственной оперативной памяти.

^ Основное преимущество лазерных принтеров заключается в возможности получения высококачественных отпечатков. Модели среднего класса обеспечивают разрешение печати до 600 dpi, а профессиональные модели – до 1200 dpi.


^ 34. Системный (ассемблерный) отладчик ОС MS-DOS - DEBUG. Интерактивные типы отладчиков.

Отладчик (Debugger) - это программа, позволяющая увидеть ход выполнения отлаживаемой программы, менять содержимое регистров, памяти и т.д в процессе выполнения. Используется для исследования алгоритма работы программ, обнаружения ошибок. Под отладчиком можно увидеть результат выполнения команд процессора, функций ОС, что, вместе с документацией, очень полезно для обучения Assembler'у. Хорошое владение отладчиком особо необходимо начинающему программисту, т.к большую часть времени создания программы будет занимать ее отладка.

Программа-отладчик DEBUG является очень важным и необходимым инструментом для изучения работы ЭВМ, поставляемым в составе DOS. Программа DEBUG позволяет осуществлять три вида действий в отношении содержимого ПЗУ и ОЗУ:

1) выборку произвольного участка памяти и отображение его содержимого в двух форматах:

- шестнадцатеричный / ASCII;

- формат не связанный с деассемблированием;

2) запись программ на машинном языке или на языке ассемблера и их выполнение;

3) исследование и отладку программ, хранящихся на диске или в памяти.

Программы, представленные на языке машинных команд (например, исполнительный модуль), чрезвычайно сложны для восприятия человеком. Процесс деассемблирования, реализуемый программой DEBUG, значительно облегчает процедуру интерпретации машинного языка.

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

^ Типы отладчиков.

Существуют следующие основные типы отладчиков:

• Ring3 отладчик: Отладчики этого типа, как правило, входят в пакет с компилятором. Представляют из себя обычную прикладную программу. Обладают очень ограниченной функциональностью. Позволяют отлаживать только прикладные программы. В TASM - TD (Turbo Debugger), В MASM - CodeView.

• Ring0 отладчик: Отладчики этого типа являются Ring0 драйверами ОС, поэтому имеют неограниченные возможности по управлению компьютером (доступ к памяти, регистрам, портам ввода-вывода и т.д). Позволяют отлаживать всё: прикладные программы, драйверы и т.д. Лучшими считаются SoftICE и KD.


35. Ассемблер для микропроцессоров с архитектурой INTEL 80x86. Общая характеристика языка, основные особенности и возможности. Инструментальные системы для разработки программ на языке Ассемблера.

Язык ассемблера представляет собой машинный язык в символической форме, которая более понятна и удобна человеку.

Язык ассемблера микропроцессора Intel 8086 является довольно сложным, что в первую очередь объясняется сегментной организацией памяти и одновременной адресацией четырех сегментов. В языке имеется более 100 базовых символических команд, в соответствии с которыми ассемблер генерирует более 3800 машинных команд. Кроме того, в распоряжении программиста имеется более 20 директив, предназначенных для распределения памяти, инициализации переменных, условного ассемблирования и т.д.

Исходная программа на языке ассемблера представляет собой последовательность операторов. Операторы обычно занимают одну строку. Ассемблер воспринимает операторы в свободном формате, т.е. элементам операторов не назначены фиксированные столбцы и между ними может быть любое число пробелов там, где это необходимо.

Операторы в исходной программе классифицируются как командные операторы, операторы распределения данных и директивы ассемблера.

Командные операторы определяют генерируемые ассемблером машинные команды; они содержат мнемонику и, при необходимости, один или два операнда. Каждый командный оператор порождает одну машинную команду, формат которой зависит от способа задания операндов.

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

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

Ассемблер

Языки программирования компьютеров делятся на 2 основные группы:

1) языки низкого уровня;

2) языки высокого уровня.

К языкам низкого уровня относятся языки Ассемблера. Свое название они получили от имени системной программы Ассемблер, которая преобразует исходные программы, написанные на таких языках, непосредственно в коды машинных команд. Термин "Ассемблер" произошел от английского слова assembler (сборщик частей в одно целое). Частями здесь служат операторы, а результатом сборки последовательность машинных команд. Процесс сборки называется ассемблированием.

Язык Ассемблера объединяет в себе достоинства языка машинных команд и некоторые черты языков высокого уровня. Ассемблер обеспечивает возможность применения символических имен в исходной программе и избавляет программиста от утомительного труда (неизбежного при программировании на языке машинных команд) по распределению памяти компьютера для команд, переменных и констант.

Ассемблер позволяет также гибко и полно использовать технические возможности компьютера, как и язык машинных команд. Транслятор исходных программ в Ассемблере проще транслятора, требующегося для языка программирования высокого уровня. На Ассемблере можно написать столь же эффективную по размеру и времени выполнения программу, как и программу на языке машинных команд. Это достоинство отсутствует у языков высокого уровня. Этот язык часто применяют для программирования систем реального времени, технологическими процессами и оборудованием, обеспечение работы информационно-измерительных комплексов. К таким системам обычно предъявляются высокие требования по объему занимаемой машинной памяти. Часто язык Ассемблера дополняется средствами формирования макрокоманд, каждая из которых эквивалентна целой группе машинных команд. Такой язык называют языком макроассемблера. Применение мак "строительных" блоков и приближает язык Ассемблера к языку высокого уровня.

Ассемблер машинно-зависимый язык, т. е. он отражает особенности архитектуры конкретного типа компьютера. Исходная программа, написанная на ассемблере, состоит из одного или нескольких исходных модулей, а каждый модуль – из операторов.

^ Специфические особенности языка

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

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

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

Очевидным недостатком является низкий уровень абстрагирования от особенностей конкретной ЭВМ, необходимость знать и учитывать эти особенности. В то время как при работе с языками высокого уровня программист может полностью сосредоточить свое внимание на особенностях реализуемого алгоритма.

Что же касается инструментальных средств для разработки приложений на ''чистом'' ассемблере, то в последнее время появились очень мощные приложения такого рода, что вынуждает по-другому взглянуть на проблему. Из таких инструментальных средств проектирования можно выделить в первую очередь макроассемблер MASM32, а также AsmStudio и NASM. Эти и другие инструменты разработки программ имеют самый современный графический интерфейс. Не следует забывать и о том, для ассемблера разработаны многочисленные библиотеки функций, приближающие этот язык по своим функциональным возможностям к высокоуровневым средствам разработки приложений.

Turbo Assembler (TASM) — программный пакет компании Borland, предназначенный для разработки программ на языке ассемблера для архитектуры x86. Кроме того, TASM может работать совместно с трансляторами с языков высокого уровня фирмы Borland, такими как Turbo C и Turbo Pascal. Как и прочие программные пакеты серии Turbo, Турбо Ассемблер больше не поддерживается.

TASM до сих пор используется для обучения программированию на ассемблере под архитектуру x86.[источник не указан 487 дней] Многие находят его очень удобным и продолжают его использовать, расширяя набором дополнительных макросов.[источник не указан 487 дней]

Пакет TASM поставляется вместе с компоновщиком Turbo Linker и порождает код, который можно отлаживать с помощью Turbo Debugger.

По умолчанию TASM работает в режиме совместимости с другим распространённым ассемблером — Microsoft Macro Assembler, то есть TASM умеет транслировать исходники, разработанные под MASM. Кроме того, TASM имеет режим IDEAL, улучшающий синтаксис языка и расширяющий его функциональные возможности.

Microsoft Macro Assembler (MASM) — ассемблер для процессоров семейства x86. Первоначально был произведён компанией Microsoft для написания программ в операционной системе MS-DOS и был в течение некоторого времени самым популярным ассемблером, доступным для неё. Это поддерживало широкое разнообразие макросредств и структурированность программных идиом, включая конструкции высокого уровня для повторов, вызовов процедур и чередований (поэтому MASM — ассемблер высокого уровня). Позднее[когда?] была добавлена возможность написания программ для Windows. MASM — один из немногих инструментов разработки Microsoft, для которых не было отдельных 16- и 32-битных версий.

NASM (Netwide Assembler) — свободный (LGPL и лицензия BSD) ассемблер для архитектуры Intel x86. Используется для написания 16-, 32- и 64-битных программ.


36. Алфавит языка Ассемблер. Базовые синтаксические элементы (лексемы) языка. Предложения: - команды, директивы, комментарии. Синтаксис команд и директив. Резервированные идентификаторы.

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

Символы исходной программы представляют собой подмножество таблиц символов ASCII для DOS и ANSI для WINDOWS. В исходном тексте программы, написанном на языке программирования PL/M-51 допустимо использование следующих символов:

  • символы интервала,

  • буквы,

  • знаки

  • цифры.

Символы интервала определяют один или несколько пробелов в предложении исходного модуля. К этим символам относятся "пробел" и " табуляция".

В качестве букв воспринимаются латинские буквы верхнего и нижнего регистра:

A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z.

перечень цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Наименования знаков и их обозначение:

Номер #


Знак денежной единицы $


Апостроф '


круглая скобка левая (


круглая скобка правая )


Звездочка *


Плюс +


Запятая ,


Минус -


Точка .


дробная черта /


Двоеточие :


Точка с запятой ;


Меньше <


Равно =


больше >


вопросительный знак ?


коммерческое эт @

Знаки, комбинации знаков (<>, >=, <= ), а также символы интервала являются разделителями конструкций языка. До и после знака - разделителя в любой конструкции языка могут быть вставлены символы интервала.

ASCII символы, не входящие в перечень основных символов алфавита языка, считаются дополнительными. Эти символы могут использоваться для пояснений в исходном тексте программы, а также для определения символьных констант.

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

Идентификаторы

Идентификатор это символическое обозначение объекта программы. В качестве идентификатора может быть использована любая последовательность букв и цифр. При этом в качестве буквы может быть использована любая буква латинского алфавита, а также вопросительный знак (?) и знак "нижнее подчеркивание" ( _ ). Идентификатор может начинаться только с буквы! Это позволяет отличать его от числа. В идентификаторах, язык программирования ASM-51 различает буквы верхнего и нижнего регистров.

Количество символов в идентификаторе ограничено длиной строки (255 символов). Транслятор различает идентификаторы по первым 31 символам.

Примеры идентификаторов:

^ ADD5, FFFFH, ?, ALFA_1.

В языке программирования ASM-51 имеются три категории идентификаторов:

ключевые слова;

встроенные имена;

определяемые имена.

^ Ключевые слова

Ключевое слово является определяющей частью оператора языка ассемблера. Значения ключевых слов языка ассемблера АSМ-51 не могут быть изменены или переопределены в программном модуле каким-либо образом. Ключевому слову не может быть назначено имя- синоним. Ключевые слова могут быть написаны буквами как верхнего, так и нижнего регистров.

В языке АSМ-51 имеются следующие категории ключевых слов:

инструкции;

директивы;

вспомогательные слова;

операции.

Инструкции по форме записи совпадают с мнемоническими обозначениями команд микроконтроллеров семейства MCS-51 и совместно с операндами, составляют команды микроконтроллера. Список инструкций:

ACALL, ADD, ADDC, AJMP, ANL, CALL, CJNE, CLR, CPL, DA, DEC, DIV, DJNZ, INC, JB, JBC, JC, JMP, JNB, JNC, JNZ, JZ, LCALL, LJMP, MOV, MOVC, MOVX, MUL, NOP, ORL, POP, PUSH, RET, RETI, RL, RLC, RR, RRC, SETB, SJMP, SUBB, SWAP, XCH, XCHD, XRL.

Директивы совместно с вспомогательными словами определяют действия в программе, которые должны быть выполнены ассемблером в процессе преобразования исходного текста программы в объектный код. В языке программирования ASM51 используются:

Директивы: BIT, BSEG, CODE, CSEG, DATA, DB, DBIT, DS, DSEG, DW, END, EQU, EXTRN, IDATA, ISEG, NAME, ORG, PUBLIC, RSEG, SEGMENT, SET, USING, XDATA, XSEG.

Вспомогательные слова: AT, BIT, BITADDRESSABLE, CODE, DATA, IDATA, INBLOCK, INPAGE, NUMBER, PAGE, UNIT, XDATA.

Операции выполняются ассемблером в процессе вычисления выражений на этапе трансляции исходного текста программы для определения конкретного числа, которое используется в команде. Перечень операций, использующихся языком программирования ASM-51:

AND, EQ, GE, GT, HIGH, LE, LOW, LT, MOD, NE, NOT, OR, SHL, SHR, XOR.

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


37. Структура программ на языке Ассемблер. Программные сегменты. Типы, описание, назначение. Макроопределения. Специальные директивы компилятора. Определение именованных констант.

Программа на ассемблере представляет собой совокупность блоков памяти, называемых сегментами памяти. Программа может состоять из одного или нескольких таких блоков-сегментов. Каждый сегмент содержит совокупность предложений языка, каждое из которых занимает отдельную строку кода программы.

^ Предложения ассемблера бывают четырех типов:

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

В процессе трансляции инструкции ассемблера преобразуются в соответствующие команды системы команд микропроцессора;

  • макрокоманды — оформляемые определенным образом предложения текста программы, замещаемые во время трансляции другими предложениями;

  • директивы, являющиеся указанием транслятору ассемблера на выполнение некоторых действий. У директив нет аналогов в машинном представлении;

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


Макроопределения

Одно из самых мощных языковых средств ассемблера — макроопределения. Макроопределением (или макросом) называется участок программы, которому присвоено имя и который ассемблируется всякий раз, когда ассемблер встречает это имя в тексте программы. Макрос начинается директивой MACRO и заканчивается ENDM. Например: пусть описано макроопределение hex2ascii, переводящее шестнадцатеричное число, находящееся в регистре AL, в ASCII-код соответствующей шестнадцатеричной цифры:

hex2ascii macro

cmp al,10

sbb al,69h

das

endm

Теперь в программе можно использовать слово hex2ascii, как если бы это было имя команды, и ассемблер заменит каждое такое слово на три команды, содержащиеся в макроопределении. Разумеется, можно оформить этот же участок кода в виде процедуры и вызывать его командой CALL — если процедура вызывается больше одного раза, этот вариант программы займет меньше места, но вариант с макроопределением станет выполняться быстрее, так как в нем не будет лишних команд CALL и RET. Однако скорость выполнения — не главное преимущество макросов. В отличие от процедур макроопределения могут вызываться с параметрами, следовательно, в зависимости от ситуации, включаемый код будет немного различаться, например:

s_mov macro register1,register2

push register1

pop register2

endm

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

Следующее важное средство, использующееся в макроопределениях, — директивы условного ассемблирования. Например: напишем макрос, выполняющий умножение регистра AX на число, причем, если множитель — степень двойки, то умножение будет выполняться более быстрой командой сдвига влево.

fast_mul macro number

if number eq 2

shl ax,1 ; Умножение на 2

elseif number eq 4

shl ax,2 ; Умножение на 4

elseif number eq 8

shl ax,3 ; Умножение на 8

... ; Аналогично вплоть до:

elseif number eq 32768

shl ax,15 ; Умножение на 32768

else

mov dx,number ; Умножение на число, не являющееся

mul dx ; степенью двойки.

endif

endm

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

Компилятор поддерживает ряд директив. Директивы не транслируются непосредственно в код. Вместо этого они используются для указания положения в программной памяти, определения макросов, инициализации памяти и т.д. Список директив приведён в таблице



Все директивы предваряются точкой.


^ BYTE - Зарезервировать байты в ОЗУ

Директива BYTE резервирует байты в ОЗУ. Если Вы хотите иметь возможность ссылаться на выделенную область памяти, то директива BYTE должна быть предварена меткой. Директива принимает один обязательный параметр, который указывает количество выделяемых байт. Эта директива может использоваться только в сегменте данных(смотреть директивы CSEG и DSEG). Выделенные байты не инициализируются.

Синтаксис: МЕТКА: .BYTE выражение

^ CSEG - Программный сегмент

Директива CSEG определяет начало программного сегмента. Исходный файл может состоять из нескольких программных сегментов, которые объединяются в один программный сегмент при компиляции. Программный сегмент является сегментом по умолчанию. Программные сегменты имеют свои собственные счётчики положения, которые считают не побайтно, а пословно. Директива ORG может быть использована для размещения кода и констант в необходимом месте сегмента. Директива CSEG не имеет параметров.

Синтаксис: .CSEG

^ DB - Определить байты во флэш или EEPROM

Директива DB резервирует необходимое количество байт в памяти программ или в EEPROM. Если Вы хотите иметь возможность ссылаться на выделенную область памяти, то директива DB должна быть предварена меткой. Директива DB должна иметь хотя бы один параметр. Данная директива может быть размещена только в сегменте программ (CSEG) или в сегменте EEPROM (ESEG).

Параметры, передаваемые директиве - это последовательность выражений разделённых запятыми. Каждое выражение должно быть или числом в диапазоне (-128..255), или в результате вычисления должно давать результат в этом же диапазоне, в противном случае число усекается до байта, причём БЕЗ выдачи предупреждений.

Если директива получает более одного параметра и текущим является программный сегмент, то параметры упаковываются в слова (первый параметр - младший байт), и если число параметров нечётно, то последнее выражение будет усечено до байта и записано как слово со старшим байтом равным нулю, даже если далее идет ещё одна директива DB.

Синтаксис: МЕТКА: .DB список_выражений

^ DEF - Назначить регистру символическое имя

Директива DEF позволяет ссылаться на регистр через некоторое символическое имя. Назначенное имя может использоваться во всей нижеследующей части программы для обращений к данному регистру. Регистр может иметь несколько различных имен. Символическое имя может быть переназначено позднее в программе.

Синтаксис: .DEF Символическое_имя = Регистр

^ DEVICE - Определить устройство для которого компилируется программа

Директива DEVICE позволяет указать для какого устройства компилируется программа. При использовании данной директивы компилятор выдаст предупреждение, если будет найдена инструкция, которую не поддерживает данный микроконтроллер. Также будет выдано предупреждение, если программный сегмент, либо сегмент EEPROM превысят размер допускаемый устройством. Если же директива не используется то все инструкции считаются допустимыми, и отсутствуют ограничения на размер сегментов.

Синтаксис: .DEVICE AT90S1200 |AT90S2313 | AT90S2323 | AT90S2333 | AT90S2343 | AT90S4414 | AT90S4433 | AT90S4434 | AT90S8515 | AT90S8534 | AT90S8535 | ATtiny11 | ATtiny12 | ATtiny22 | ATmega603 | ATmega103

^ DSEG - Сегмент данных

Директива DSEG определяет начало сегмента данных. Исходный файл может состоять из нескольких сегментов данных, которые объединяются в один сегмент при компиляции. Сегмент данных обычно состоит только из директив BYTE и меток. Сегменты данных имеют свои собственные побайтные счётчики положения. Директива ORG может быть использована для размещения переменных в необходимом месте ОЗУ. Директива не имеет параметров.

Синтаксис: .DSEG

^ DW - Определить слова во флэш или EEPROM

Директива DW резервирует необходимое количество слов в памяти программ или в EEPROM. Если Вы хотите иметь возможность ссылаться на выделенную область памяти, то директива DW должна быть предварена меткой. Директива DW должна иметь хотя бы один параметр. Данная директива может быть размещена только в сегменте программ (CSEG) или в сегменте EEPROM (ESEG). Параметры передаваемые директиве - это последовательность выражений разделённых запятыми. Каждое выражение должно быть или числом в диапазоне (-32768..65535), или в результате вычисления должно давать результат в этом же диапазоне, в противном случае число усекается до слова, причем БЕЗ выдачи предупреждений.

Синтаксис: МЕТКА: .DW expressionlist

^ ENDMACRO - Конец макроса

Директива определяет конец макроопределения, и не принимает никаких параметров. Для информации по определению макросов смотрите директиву MACRO.

Синтаксис: .ENDMACRO

^ EQU - Установить постоянное выражение

Директива EQU присваивает метке значение. Эта метка может позднее использоваться в выражениях. Метка которой присвоено значение данной директивой не может быть переназначена и её значение не может быть изменено.

Синтаксис: .EQU метка = выражение

^ ESEG - Сегмент EEPROM

Директива ESEG определяет начало сегмента EEPROM. Исходный файл может состоять из нескольких сегментов EEPROM, которые объединяются в один сегмент при компиляции. Сегмент EEPROM обычно состоит только из директив DB, DW и меток. Сегменты EEPROM имеют свои собственные побайтные счётчики положения. Директива ORG может быть использована для размещения переменных в необходимом месте EEPROM. Директива не имеет параметров.

Синтаксис: .ESEG

^ EXIT - Выйти из файла

Встретив директиву EXIT компилятор прекращает компиляцию данного файла. Если директива использована во вложенном файле (см. директиву INCLUDE), то компиляция продолжается со строки следующей после директивы INCLUDE. Если же файл не является вложенным, то компиляция прекращается.

Синтаксис: .EXIT

^ INCLUDE - Вложить другой файл

Встретив директиву INCLUDE компилятор открывает указанный в ней файл, компилирует его пока файл не закончится или не встретится директива EXIT, после этого продолжает компиляцию начального файла со строки следующей за директивой INCLUDE. Вложенный файл может также содержать директивы INCLUDE.

Синтаксис: .INCLUDE "имя_файла"

^ LIST - Включить генерацию листинга

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

Синтаксис: .LIST

^ LISTMAC - Включить разворачивание макросов в листинге

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

Синтаксис: .LISTMAC

^ MACRO - Начало макроса

С директивы MACRO начинается определение макроса. В качестве параметра директиве передаётся имя макроса. При встрече имени макроса позднее в тексте программы, компилятор заменяет это имя на тело макроса. Макрос может иметь до 10 параметров, к которым в его теле обращаются через @0-@9. При вызове параметры перечисляются через запятые. Определение макроса заканчивается директивой ENDMACRO.

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

Синтаксис: .MACRO макроимя

^ NOLIST - Выключить генерацию листинга

Директива NOLIST указывает компилятору на необходимость прекращения генерации листинга. Листинг представляет из себя комбинацию ассемблерного кода, адресов и кодов операций. По умолчанию генерация листинга включена, однако может быть отключена данной директивой. Кроме того данная директива может быть использована совместно с директивой LIST для получения листингов отдельных частей исходных файлов

Синтаксис: .NOLIST

^ ORG - Установить положение в сегменте

Директива ORG устанавливает счётчик положения равным заданной величине, которая передаётся как параметр. Для сегмента данных она устанавливает счётчик положения в SRAM (ОЗУ), для сегмента программ это программный счётчик, а для сегмента EEPROM это положение в EEPROM. Если директиве предшествует метка (в той же строке) то метка размещается по адресу указанному в параметре директивы. Перед началом компиляции программный счётчик и счётчик EEPROM равны нулю, а счётчик ОЗУ равен 32 (поскольку адреса 0-31 заняты регистрами). Обратите внимание что для ОЗУ и EEPROM используются побайтные счётчики а для программного сегмента - пословный.

Синтаксис: .ORG выражение

^ SET - Установить переменный символический эквивалент выражения

Директива SET присваивает имени некоторое значение. Это имя позднее может быть использовано в выражениях. Причем в отличии от директивы EQU значение имени может быть изменено другой директивой SET.

Синтаксис: .SET имя = выражение

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

Константа в программировании — способ адресования данных, изменение которых рассматриваемой программой запрещено.


Использование констант, особенно, именованных — мощный инструмент, повышающий надёжность и безошибочность программ.


Сначала константы просто вписывались в текст программ в качестве аргументов операторов.


Например, mvi A, 0 , где 0 является числовой константой.


Затем ассемблерные компиляторы научили понимать именованные константы, серьёзно упростившие процесс отладки и сопровождения программ.


* Исчезла необходимость помнить конкретные числа — разумно придуманные имена запоминаются легче.

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

* Процесс внесения изменений стал быстр и безошибочен — значение константы присутствует в программе всего в одном месте.


К сожалению, ассемблеры не умели защищать от изменения косвенно адресуемые области памяти. Но такая возможность появилась в языках программирования высокого уровня. Те из них, которые поддерживают использование констант любых статических типов, безусловно, позволяют писать гораздо более надёжный и долговечный код.

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


^ 38. Форматы загрузочных (исполняемых) модулей типа *.EXE и *.COM. Загрузка программ, инициализация сегментных регистров. Префикс программного сегмента. (PSP).

Оператор может запустить два типа программ (если не считать командных файлов, которые, вообще говоря, не являются программами, состоящими из машинных кодов) - программы, имеющие расширение имени .COM и .EXE. Эти файлы имеют различный формат и загружаются по-разному, однако, когда загрузка завершена, в памяти компьютера эти два типа программ выглядят совершенно одинаково.

COM-файл - это двоичный образ Вашей программы, состоящий из кода и данных. То есть это файл, содержащий программу в "чистом" виде. Такая программа (как и EXE-программа) может загружаться в любое место памяти. DOS выполняет ее привязку к физическим адресам при загрузке с помощью установки сегментных регистров. Существенным ограничением COM-программы является то, что она не может занимать больше одного сегмента (соответственно, файл .COM не может быть по длине больше 64К).

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

^ Процесс загрузки программ в память

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

Определяется наименьший сегментный адрес свободного участка памяти для загрузки программы (обычно DOS загружает программу в младшие адреса памяти, если при редактировании не указана загрузка в старшие адреса). Создаются два блока памяти - блок памяти для переменных среды и блок памяти для PSP и программы. Для DOS версии 3.х и старше в блок памяти переменных среды помещается путь файла программы. Заполняются поля префикса сегмента программы PSP в соответствии с характеристиками программы (количество памяти, доступное программе, адрес сегмента блока памяти, содержащего переменные среды и т.д.) Устанавливается адрес области Disk Transfer Area (DTA) на вторую половину PSP (PSP:0080). Анализируются параметры запуска программы на предмет наличия в первых двух параметрах идентификаторов дисковых устройств. По результатам анализа устанавливается содержимое регистра AX при входе в программу. Если первый или второй параметры не содержат правильного идентификатора дискового устройства, то соответственно в регистры AL и AH записывается значение FF.

А дальше действия системы по загрузке программ форматов COM и EXE будут различаться.

Для COM-программ, которые представляют собой двоичный образ односегментной программы, выполняется чтение файла программы с диска и запись его в память по адресу PSP:0100. Вообще говоря, программы типа COM могут состоять из нескольких сегментов, но в этом случае они должны сами управлять содержимым сегментных регистров, используя в качестве базового адреса адрес PSP. После загрузки файла операционная система для COM-программ выполняет следующие действия:

сегментные регистры CS, DS, ES, SS устанавливаются на начало PSP; регистр SP устанавливается на конец сегмента PSP; вся область памяти после PSP распределяется программе; в стек записывается слово 0000; указатель команд IP устанавливается на 100h (начало программы) с помощью команды JMP по адресу PSP:100.

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


^ 39. Типы данных Ассемблера. Константы. Директивы описания и инициализации данных, директивы эквивалентности (описания констант). Формат директив.

При программировании на языке ассемблера используются данные следующих типов:

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

^ Данные простого типа, описываемые с помощью ограниченного набора директив резервирования памяти, позволяющих выполнить самые элементарные операции по размещению и инициализации числовой и символьной информации. При обработке этих директив ассемблер сохраняет в своей таблице символов информацию о местоположении данных (значения сегментной составляющей адреса и смещения) и типе данных, то есть единицах памяти, выделяемых для размещения данных в соответствии с директивой резервирования и инициализации данных.

Эти два типа данных являются элементарными, или базовыми; работа с ними поддерживается на уровне системы команд микропроцессора. Используя данные этих типов, можно формализовать и запрограммировать практически любую задачу.

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

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

байт - восемь последовательно расположенных битов, пронумерованных от 0 до 7, при этом бит 0 является самым младшим значащим битом;

слово - последовательность из двух байт, имеющих последовательные адреса. Размер слова - 16 бит; биты в слове нумеруются от 0 до 15. Байт, содержащий нулевой бит, называется младшим байтом, а байт, содержащий 15-й бит - старшим байтом. Микропроцессоры Intel имеют важную особенность - младший байт всегда хранится по меньшему адресу. Адресом слова считается адрес его младшего байта. Адрес старшего байта может быть использован для доступа к старшей половине слова.

двойное слово - последовательность из четырех байт (32 бита), расположенных по последовательным адресам. Нумерация этих бит производится от 0 до 31. Слово, содержащее нулевой бит, называется младшим словом, а слово, содержащее 31-й бит, - старшим словом. Младшее слово хранится по меньшему адресу. Адресом двойного слова считается адрес его младшего слова. Адрес старшего слова может быть использован для доступа к старшей половине двойного слова.

учетверенное слово - последовательность из восьми байт (64 бита), расположенных по последовательным адресам. Нумерация бит производится от 0 до 63. Двойное слово, содержащее нулевой бит, называется младшим двойным словом, а двойное слово, содержащее 63-й бит, - старшим двойным словом. Младшее двойное слово хранится по меньшему адресу. Адресом учетверенного слова считается адрес его младшего двойного слова. Адрес старшего двойного слова может быть использован для доступа к старшей половине учетверенного слова.

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

^ Целый тип со знаком - двоичное значение со знаком, размером 8, 16 или 32 бита. Знак в этом двоичном числе содержится в 7, 15 или 31-м бите соответственно. Ноль в этих битах в операндах соответствует положительному числу, а единица - отрицательному. Отрицательные числа представляются в дополнительном коде. Числовые диапазоны для этого типа данных следующие:

8-разрядное целое - от -128 до +127;

16-разрядное целое - от -32 768 до +32 767;

32-разрядное целое - от -231 до +231-1.

^ Целый тип без знака - двоичное значение без знака, размером 8, 16 или 32 бита. Числовой диапазон для этого типа следующий:

байт - от 0 до 255;

слово - от 0 до 65 535;

двойное слово - от 0 до 232-1.

^ Указатель на память двух типов:

ближнего типа - 32-разрядный логический адрес, представляющий собой относительное смещение в байтах от начала сегмента. Эти указатели могут также использоваться в сплошной (плоской) модели памяти, где сегментные составляющие одинаковы;

дальнего типа - 48-разрядный логический адрес, состоящий из двух частей: 16-разрядной сегментной части - селектора, и 32-разрядного смещения.

Цепочка - представляющая собой некоторый непрерывный набор байтов, слов или двойных слов максимальной длины до 4 Гбайт.

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

^ Неупакованный двоично-десятичный тип - байтовое представление десятичной цифры от 0 до 9. Неупакованные десятичные числа хранятся как байтовые значения без знака по одной цифре в каждом байте. Значение цифры определяется младшим полубайтом.

^ Упакованный двоично-десятичный тип представляет собой упакованное представление двух десятичных цифр от 0 до 9 в одном байте. Каждая цифра хранится в своем полубайте. Цифра в старшем полубайте (биты 4-7) является старшей.

Константы в ассемблере имеют 8- или 16-битовое внутренное

представление и занимают один или два последовательные байта памяти.


^ В ассемблере применимы константы следующих типов:

- десятичное число (можно закончит '.')

Пример: 123 234 456 123456.

Intel style decimal format: xxxxD не реализован так как ест опасность

совершит ошибку. Например: забыть $ и написать только 123d тогда

транслатор не предупредит вас а сгенерирует 123. Так как использование

таких констант (десятичных окончивающих на D) практически не

используется то он не реализован.


- шестнадцатеричное число

- C style: начинается "0x" пример: 0xAB 0x1234 0xF21234

- Motorola style: начинается "$" пример: $AB $1234 $F21234

- Intel style: заканчивается H пример: 0ABh 1234H 0F21234h


- двоичное число

- Motorola Style: начинается "%" пример: %11 %01 %10001

- pseudo C style: начинается "0i" пример: 0i11 0i1 0i10001

- pseudo Intel style: заканчивается I ...: 11I 1i 10001I

- Intel style: заканчивается B пример: 11B 1b 10001b

(этот формат потенциально опасен (например 1b такая же ошибка

если не указали $ как и уже описанная ситуация при xxxxD),

но так как этот формат используется то он реализован. За

это нужно написать директиву .intelbin)


- восмеричное число

- Motorola Style: начинается "@" пример: @123 @232 @021

- pseudo C style: начинается "0o" пример: 0o123 0o232 0o021

- pseudo C style: начинается "0Q" пример: 0Q123 0q232 0Q021

- Intel style: заканчивается o или Q пр.: 123q 0232Q 21o

! C style не поддерживяается (т.е. 0123 не восмеричная константа)


- символ - заключается в апострофы и

константе присваивается значение, равное ASCII-коду символа.

Символ апострофа в качестве константы удваивается.

Можно использовать ' и ".

Используя служебные слова, в программе на ассемблере можно резервировать определенное количество байт, которые потом можно использовать для хранения каких-либо данных. Вот эти служебные слова: DB - резервировать байт, DW — резервировать слово (два байта), DD - резервировать двойное слово (четыре байта), DQ - резервировать восемь байт, DT - резервировать десять байт. Причина использования меток для имен переменных, подпрограмм и конкретных инструкций очевидна. Ведь в противном случае мы не могли бы ссылаться по именам на эти элементы программ. В равной степени важна, но менее очевидна, необходимость присваивать меткам значения и текстовые строки. Присвоить метке числовое значение или текстовую строку позволяет директива EQU. Ссылка на метку директивы EQU транслируется в литеральное приравнивание. Присвоить метке числовое значение или текстовую строку позволяет директива EQU. Ссылка на метку директивы EQU транслируется в литеральное приравнивание. Директиву EQU можно использовать для присваивания метке текстовой строки или значения.

Директива = аналогична директиве EQU во всех отношениях, кроме одного: в то время как метки, определенные с помощью директивы EQU, переопределять не допускается (в этом случае происходит ошибка), метку, определенную с помощью директивы =, можно свободно переопределять. При вычислении всех операндов директивы = должно получаться числовое значение - в отличие от директивы EQU с помощью директивы = меткам нельзя присваивать текстовые строки.

Пример использования EQU: TABLE_OFFSET EQU 1


^ 40. Директивы описания сегментов. Процедуры в Ассемблере. Вызовы и возвраты (дальние и ближние).

В программировании термин «директива» (указание) по использованию похож на термин «команда», так как так же используется для описания некоторых конструкций языка программирования (то есть указаний компилятору или ассемблеру особенностей обработки при компиляции).

^ Описание сегмента — директива SEGMENT

Любые ассемблерные программы содержат, по крайней мере, один сегмент — сегмент кода. В некоторых программах используется сегмент для стековой памяти и сегмент данных (основной и дополнительный) для определения данных.

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

имяС SEGMENT [параметры] ; начало СЕГМЕНТА имяС

…...............................................................................................................................

имяС ENDS ; конец СЕГМЕНТА имяС

Имя сегмента (имяС) должно обязательно присутствовать, быть уникальным и соответствовать соглашениям для имен в Ассемблере или в другом алгоритмическом языке, для стыковки с которым делается ассемблерный модуль. Например, при стыковке Ассемблера с Turbo/Borland Pascal имяС должно быть СТРОГО определенным:

* для сегмента кода CSEG или CODE; * для сегмента данных DSEG или DATA; * для сегмента стека STACK.

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

В одном модуле можно открывать и закрывать сегмент с одним и тем же именем имяС несколько раз, но пересекаться (вкладываться друг в друга) разные сегменты НЕ должны. Компилятор просматривает ассемблерный модуль и объединяет вместе все части сегментов с одинаковым именем в том порядке, в каком он их обнаруживает (сверху-вниз).

Директива SEGMENT может содержать три основных типа необязательных параметров, определяющих выравнивание (align), объединение (combine) и класс ('class'), между которыми должен быть хотя бы один пробел в качестве разделителя. Параметры имеют смысл при разработке БОЛЬШИХ ассемблерных программ.

^ Описание процеду

Модуль на Ассемблере, как и модули на алгоритмических языках, обычно состоит из процедур. Для описания процедур используются две директивы. Визуально они похожи на соответствующие директивы описания сегмента

имяP PROC [параметры] ; начало процедуры имяP

.…………….…………….…………….…………….…………….……………

RET ; КОМАНДА возврата в точку вызова процедуры

.…………….…………….…………….…………….…………….…………….

имяP ENDP ; конец процедуры имяP

У директивы PROC достаточно много параметров. Если кому нужно, то сами поищите, инфы много.

Обратите внимание на ОБЯЗАТЕЛЬНУЮ команду RET. Она может быть в любом нужном месте процедуры и НЕ единственная. Если ее в процедуре НЕ будет, то ассемблерная программа НЕ сможет нормально работать — возникнет зависание.

^ Вызовы и возврат (дальние и ближние). Команды безусловных переходов: JMP осуществляет безусловный переход(NEAR(-127; +128), FAR в пределах сегмента, SHORT) команда CALL передает управление подпрограмме с автоматическим сохранением адреса возврата в стеке. Команда RET возвращает управление вызывающей программе. Команда возврата — это косвенный переход т. к. адрес перехода извлекается из вершины стека.



  1. ^ Система команд Ассемблера. Основные типы команд и их классификация. Синтаксис (формат записи) команд. Способы адресации операндов.


Типы команд:

Мы можем разделить систему команд на семь функциональных групп:

1.^ Команды пересылки данны, осуществляющие обмен информацией между регистрами, ячейками данных и портами ввода-вывода.

2. Арифметические команды, выполняющие арифметические операции над двоичными или двоично-десятичными (в формате BCD – binary-coded decimal) числами.

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

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

5. Команды обработки строк, перемещающие, сравнивающие и сканирующие строки данных.

6. Команды прерывания, отвлекающие микропроцессор на обработку некоторых специфичных ситуаций.

7. Команды управления процессором, устанавливающие и сбрасывающие флаги состояния, а также изменяющие режим функционирования микропроцессора.


^ Типичный формат записи команд:

[метка:] опкод [операнды] [;комментарий]

где опкод (код операции) — непосредственно мнемоника нструкции процессору. К ней могут быть добавлены префиксы (повторения, изменения типа адресации и пр.).

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

1   2   3   4   5   6   7   8



Скачать файл (1876 kb.)

Поиск по сайту:  

© gendocs.ru
При копировании укажите ссылку.
обратиться к администрации
Рейтинг@Mail.ru