Символьные данные не имеют специально разработанных для них форматов. При обработке текстов ЭВМ рассматривает символ как целое число без знака, представленное в формате с фиксированной точкой. Значение этого числа рассматривается как порядковый номер символа в таблице кодировки. В настоящее время используются таблицы кодировки, в которых на кодирование символа отведено 8 бит или 16 бит. Наибольшее распространение получили системы кодировки:
Кодировка EBCD I C (Expanded Binary Coded Decimal Interchange Code) обычно используется на универсальных ЭВМ. В России используется во многом совпадающая с ней кодировка ДКОИ (двоичный код обмена информацией). Для кодировки символа используется 8 бит. Количество кодируемых символов 28 = 256 символов.
Кодировка ASCII (American Standard Coding for Information Intorhange) обычно используется на мини и микро-ЭВМ. Для кодировки символа используется 8 бит. Количество кодируемых символов 28 = 256 символов.
В силу широкой распространенности кодировки ASCII рассмотрим ее подробнее.
Таблица кодировки ASCII состоит из двух частей.
Первая часть таблицы содержит коды от 0[10] до 127[10]. Соглашения о кодируемых в этой половине символах являются общепринятыми. Первая часть таблицы содержит коды управляющих символов, латинских букв, десятичных цифр и знаков препинания.
Вторая часть таблицы содержит коды от 128[10] до 255[10]. Эти коды используются для кодировки символов национальных алфавитов и других символов по правилам, принятым в данной стране.
Кодировка UNICODE использует для кодировки одного символа 16 бит, что позволяет закодировать 65535 символов. Кодировка символов с кодами 0 – 127 совпадает с кодировкой ASCII.
Таблицы кодировки ASCII и UNICODE можно найти в справочной литературе. Остановимся только на некоторых закономерностях кодировки, которые используются программистами при обработке текстовых данных. Все рассматриваемые коды приводятся в десятичной системе счисления.
Коды десятичных цифр образуют непрерывную возрастающую последовательность. Наименьший код имеет цифра ‘0’ – 48, а наибольший код - цифра ‘9’ – 57.
Это свойство часто используется для получения числового эквивалента цифры. Для этого из кода цифры необходимо вычесть код цифры ‘0’, например:
Числовой эквивалент цифры ‘4’ = ‘4’ – ‘0’ = 52 – 48 = 4.
Коды латинских прописных (больших) букв образуют непрерывную возрастающую последовательность. Наименьший код у буквы ‘A’ – 65, а наибольший - у буквы ‘Z’ – 90.
Коды латинских строчных (маленьких) букв образуют непрерывную возрастающую последовательность. Наименьший код у буквы ‘a’ – 97, а наибольший - у буквы ‘z’ – 122.
Свойство упорядоченности часто используется для получения порядкового номера буквы в латинском алфавите. Рассмотрим пример ( отсчет номеров букв начинается с нуля):
Порядковый номер буквы ‘D’ = ‘D’ – ‘A’ = 68 – 65 = 3
Порядковый номер буквы ‘d’ = ‘d’ – ‘a’ = 100 – 97 = 3
Разность кодов одноименных строчных и прописных букв постоянна и эта разность составляет 32, что соответствует коду пробела. Это свойство используется для преобразования строчных букв в прописные и наоборот, например:
Преобразуем ‘D’ Þ ‘d’: ‘D’ + (‘a’ – ‘A’) = ‘d’
68 + (97 – 65) = 100
Преобразуем ‘d’ Þ ‘D’: ‘d’ - (‘a’ – ‘A’) = ‘D’
100 - (97 – 65) = 68
Особый вид текстовых данных представляют символьные строки. Символьная строка рассматривается как последовательность символов. Каждому символу соответствует код символа. Строки имеют разную длину.
Длина строки может указываться явно или косвенно.
Явное указание. Перед символами строки располагается поле фиксированного размера, в котором указана длина строки.
Косвенное указание. За значащими символами строки размещается дополнительный символ с заранее оговоренным кодом. Этот символ играет роль признака конца строки. Код этого символа не должен совпадать ни с одним из символов строки. В качестве такового обычно используют символ с кодом 0 и называют его ноль-символом.
СИСТЕМА КОМАНД
Типовые операции
В силу принципа активности команд содержимое ячеек памяти трактуется по месту их обработки в процессоре. Поэтому команда помимо адресов операндов должна содержать следующую информацию:
v Вид обработки операнда (собственно операция).
v Тип операнда, т.е. длину ячейки памяти и способ трактовки ее содержимого – целое число, вещественное число и т.д.
v Способ адресации операнда.
Обычно эта информация кодируется в поле КОП. Каждому значению КОП соответствует своя команда процессора (машинная команда). Совокупность команд, которые может выполнять процессор, называют системой команд.
Разнообразие типов операндов и способов адресации приводит к тому, что процессор имеет свыше сотни команд при небольшом количестве видов обработки. Вид обработки отражает потребности алгоритма в преобразовании данных. Именно вид обработки будем понимать под термином “операция” в рамках этого занятия.
В зависимости от вида обработки выделяют следующие основные группы операций:
· арифметические операции;
· логические операции;
· сдвиговые операции;
· операции пересылки;
· операции управления;
· операции ввода-вывода.
·
Арифметические операции
К основным арифметическим операциям относятся операции с целыми числами: сложение, вычитание, инкремент (+1), декремент (-1), изменение знака числа, сравнение чисел. Операционное устройство выполняет арифметические преобразования данных в формате машинного слова или более коротких форматах.
Операции с длинными целыми числами, операции умножения и деления, а также операции с вещественными числами выполняются специализированным математическим сопроцессором или программным путем.
Выполнение арифметических операций на уровне машинных команд сопровождается контролем диапазона значений. При программировании на языках высокого уровня переполнение при операциях с целыми числами игнорируется, поэтому отслеживать диапазон значений должен сам программист. При операциях с вещественными числами выход за диапазон значений фиксируется как переполнение порядка или потеря значимости.
Логические операции
Логические операции предназначены для формирования признаков, используемых при управлении ходом выполнения программы. Эти операции рассматривают операнд с точки зрения его соответствия одному из двух значений: “Истина” или ”Ложь”. Типовые логические операции: НЕ, И, ИЛИ. Результат определяется таблицей истинности и представляет собой код, соответствующий “Истина” или ”Ложь”.
Особое место занимают битовые операции. Иногда их рассматривают как разновидность логических операций. В других случаях их выделяют в отдельную группу. С логическими операциями их сближает то, что битовые операции рассматривают данные как логические значения. Но, в отличие от логических операций, в качестве логического значения рассматривается каждый бит обрабатываемого кода.
Типовые битовые операции:
- инверсия битов (битовое НЕ),
- битовое умножение (битовое И),
- битовая неэквивалентность (битовое М2),
- битовое сложение (битовое ИЛИ).
Схемы выполнения битовых операций приведены на Рис.1.
Битовые операции используются для обработки отдельных бит кода. Такая необходимость часто возникает из-за того, что поля битов в составе единого кода имеют разное смысловое значение. Такой прием обычно используется в кодах, описывающих состояние аппаратных средств ЭВМ. Например, байт атрибутов, который определяет режим отображения символа на экране, имеет три разных по смыслу поля:
Биты с 0 по 3 – цвет символа
Биты с 4 по 6 – цвет фона
Бит 7 – признак мерцания символа
Обработка бит сводится к четырем основным задачам:
1.Проверка состояния заданного бита
2.Установка заданных бит в нулевое состояние
3.Установка заданных бит в единичное состояние
4.Инверсия заданных бит
В основе решения лежит выполнение битовой операции над исходным кодом и специально подготовленным кодом, который называется маской. Решение задач будем рассматривать на примере исходного пятиразрядного кода, приведенного на рисунке.
Проверка состояния заданного бита. Маска должна содержать единицу в проверяемом бите. Остальные биты маски нули. Выполняется битовая операция И и результат рассматривается как целое число. Если оно отлично от нуля, то бит находится в единичном состоянии, а если равно нулю – то в нулевом.
Пример. Проверить состояние бита с номером 1 и бита с номером 4.
1 0 1 0 1 (Исходный код) 1 0 1 0 1
· 0 0 0 1 0 (Маска) · 1 0 0 0 0
0 0 0 0 0 (Результат) 1 0 0 0 0
Вывод: бит с номером 1 находится в нулевом состоянии, а бит с номером 4 в единичном.
Установка заданных бит в нулевое состояние. Маска должна содержать нули в интересующих битах. Остальные биты маски единичные. Выполняется битовая операция И и ее результат записывается на место исходного кода. Единичные биты маски гарантируют сохранение состояния всех бит, кроме интересующих бит.
Пример. Установить биты с номерами 1 и 2 в нулевое состояние.
1 0 1 0 1 (Исходный код)
· 1 1 0 0 1 (Маска)
1 0 0 0 1 (Результат)
Установка заданных бит в единичное состояние. Маска должна содержать единицы в интересующих битах. Остальные биты маски нулевые. Выполняется битовая операция ИЛИ. Результат записывается на место исходного кода. Нулевые биты маски гарантируют сохранение состояния всех бит, кроме интересующих бит.
Пример. Установить биты с номерами 1 и 2 в единичное состояние.
1 0 1 0 1 (Исходный код)
Ú0 0 1 1 0 (Маска)
1 0 1 1 1 (Результат)
Инверсия заданных бит. Маска должна содержать единицы в интересующих битах. Остальные биты маски нулевые. Выполняется битовая операция М2. Результат записывается на место исходного кода. Нулевые биты маски гарантируют сохранение состояния всех бит, кроме интересующих бит.
Пример. Инвертировать биты с номерами 0,1 и 4.
1 0 1 0 1 (Исходный код)
Å 1 0 0 1 1 (Маска)
0 0 1 1 0 (Результат)
Достаточно часто возникает задача занесения в поле заданного кода. Решение этой задачи может потребовать установки битов в разное состояние. В качестве примера рассмотрим задачу занесения кода 001в биты с номерами 3,2,1.
В этом случае можно использовать один из следующих методов:
1. Последовательная установка бит сначала в одно состояние, а потом в другое.
1 0 1 0 1 (Исходный код)
Ú 0 0 0 1 0 (Маска для установки единицы)
1 0 1 1 1 (Единица занесена)
· 1 0 0 1 1 (Маска для установки нулей)
1 0 0 1 1 (Нули занесены)
2. Обнуление заданного поля и занесение в него кода через операцию битового ИЛИ.
Маска в этом случае должна содержать в интересующих битах заданный код. Остальные биты нулевые.
1 0 1 0 1 (Исходный код)
· 1 0 0 0 1 (Маска для обнуления)
1 0 0 0 1 (Нули занесены)
Ú 0 0 0 1 0 (Маска для занесения кода)
1 0 0 1 1 (Код занесен)
Предпочтительным является второй метод. Он обеспечивает решение задачи при заранее неизвестном по значению коде.
Сдвиговые операции
Выполняют направленное перемещение битов в пределах разрядной сетки. Сдвиг в сторону старших разрядов называют сдвигом влево, а в сторону младших разрядов - сдвигом вправо. В зависимости от способа заполнения освободившихся разрядов различают три вида сдвигов:
v Арифметический;
v Логический;
v Циклический.
Арифметический сдвиг. Вытолкнутые биты теряются. При сдвиге влево освобождающиеся правые биты заполняются нулем. При сдвиге вправо освобождающиеся левые биты заполняются значением старшего (знакового) бита. Схемы арифметического сдвига на примере пятиразрядного кода показаны на Рис.2.
Циклический сдвиг. При логическом и арифметическом сдвиге вытолкнутые за разрядную сетку биты безвозвратно теряются. При циклическом сдвиге вытолкнутые биты записываются на место освободившихся битов. Схемы циклического сдвига на примере пятиразрядного кода показаны на Рис.4.
Циклический сдвиг влево или вправо на n битов, где n равно длине разрядной сетки, приведет к получению исходного двоичного кода. Для рассмотренных примеров исходный код будет получен при сдвиге на пять бит
Типичной областью применения сдвигов является программная реализация умножения и деления.
Операции пересылки
Применяются для перемещения данных в памяти. Чаще всего приходится пересылать данные между ячейками основной памяти и регистрами общего назначения.
Операции управления
Предназначены для организации переходов при выполнении программы. В команде в явном виде указывается адрес следующей команды АСК. Для организации условных переходов кроме АСК указывается признак, по которому происходит переход. Обычно значение признака устанавливается предыдущей командой. Типичные признаки:
v Результат равен нулю;
v Результат отрицательный;
v Результат положительный;
v Переполнение.
Некоторые операции не формируют признак результата. Для выполнения условного перехода после такой операции в программу включают специальную команду, формирующую признак результата. Типичным примером такой команды является команда “Сравнить”.
Для организации вызова подпрограмм применяют операции типа "переход с возвратом". Перед выполнением перехода эта операция запоминает в памяти “точку возврата” - текущее значение счетчика команд. После завершения подпрограммы в счетчик заносится запомненное значение, то есть возобновляется выполнение программы.
Для управления вызовами подпрограмм используется специальный механизм, называемый стеком. Сущность этого механизма приведена на рисунке.
Стек представляет собой область памяти. Начало этой области памяти называется вершиной стека. В вершину стека заносятся данные выполняющейся подпрограммы. Вызов подпрограммы приводит к “опусканию” стека, после чего в вершине запоминается счетчик команд выполнявшейся подпрограммы. Возврат из подпрограммы вызывает “подъем” стека. Это приводит к выталкиванию из вершины стека и занесению в счетчик команд запомненного адреса очередной команды и восстановлению в вершине стека данных предыдущей подпрограммы.
Таким образом, в вершине стека всегда находятся данные выполняемой в данный момент подпрограммы. Программа считается выполненной, если стек становится пустым. Рассмотрим этот процесс на примере выполнения приведенной на рисунке программы. На схеме отражен процесс запоминания данных выполняемой подпрограммы.
Действие: Вызов Main>Вызов F1>Вызов F2>Возврат из F2>Возврат из F1>Возврат из Main
Стек: Пусто Main F1 F2 F1 Main Пусто
Main F1 Main
Main
Операции ввода-вывода
Операции рассмотренных выше групп предназначены для обработки данных в центральной части ЭВМ. В силу общих принципов обработки данных в центральной части ЭВМ эти операции реализуются по схожим схемам.
Операции ввода-вывода предназначены для пересылки данных между основной памятью и внешними устройствами. Так как ввод-вывод организуется в разных ЭВМ по разному, реализация этих операций существенно зависит от типа ЭВМ.
Рассмотрим крайние ситуации.
При наличии ПВВ набор операций ввода-вывода основного процессора ограничен несколькими командами, которые управляют работой ПВВ, например, “Начать ввод-вывод”, “Завершить ввод-вывод”.
При централизованном управлении специальных команд ввода-вывода может не быть вообще. За каждым внешним устройством закрепляется одна или несколько ячеек памяти, через которые организуется обмен данными. В этом случае обмен может быть выполнен с помощью операций пересылки.
Все остальные варианты операций ввода-вывода занимают промежуточное положение между этими схемами.
СИСТЕМА ПРЕРЫВАНИЙ
Понятие прерывания
Во время выполнения программы могут возникать особые ситуации, требующие немедленной реакции ЭВМ. Источником таких ситуаций могут быть:
1. Аппаратура центральной части ЭВМ (внутренние прерывания). Например, обнаружение ошибки при передаче данных между основной памятью и процессором.
2. Аппаратура периферийной части ЭВМ (внешние прерывания). Например, нажатие клавиши на клавиатуре, нажатие кнопки мыши и т.п.
3. Программа, которую в данный момент выполняет ЭВМ (программные прерывания). Особые ситуации в этом случае могут возникать при “нештатном” режиме работы программы или же создаваться программой преднамеренно. Примером “нештатной” работы программы может быть попытка деления на ноль, извлечение квадратного корня из отрицательного числа и т.п. Преднамеренно эта ситуация создается с помощью команд вызова прерывания.
Реакция ЭВМ на особые ситуации заключается в приостановке выполнения текущей программы и переходе к выполнению специальной программы обработки особой ситуации. После завершения программы обработки ЭВМ возвращается к выполнению текущей программы. Этот процесс называется прерыванием программы, а аппаратно программные средства обработки особых ситуаций – системой прерываний.
При возникновении особой ситуации формируется сигнал оповещения, называемый запросом на прерывание. Запрос для внутренних и внешних прерываний формируется аппаратными средствами, а для программных – программными средствами.
Реакция ЭВМ на особые ситуации для некоторых источников может быть одной и той же. Другими словами, этим источникам соответствует одна и та же обрабатывающая программа.
Множество особых состояний, обслуживаемых одной и той же программой, образует класс прерывания. Каждому классу прерываний назначается номер, называемый кодом прерывания. Код прерывания однозначно определяет, какая обрабатывающая программа должна обрабатывать возникшую особую ситуацию.
Количество источников может достигать сотен, а количество классов значительно меньше, как правило, не больше нескольких десятков.
Типичными классами прерываний являются:
v Прерывания от схем контроля;
v Прерывания от пульта управления ЭВМ и других внешних устройств;
v Прерывания от системы ввода-вывода;
v Прерывания при обращении программ к запрещенным для использования ресурсам;
v Программные прерывания.
Многие ЭВМ допускают прерывание прерывающей программы. Количество программ, которые могут последовательно прерывать друг друга, называется глубиной прерывания.
Дата: 2019-02-02, просмотров: 272.