Системное программирование

Автор: Пользователь скрыл имя, 10 Марта 2013 в 15:44, курс лекций

Описание работы

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

Работа содержит 1 файл

Системное программирование 15 лекций.doc

— 946.00 Кб (Скачать)

STOKTAB DB '101','Excavators' DB '107','Processors'  
DB '109','Assemblers' ...

Таблицы с ранжированием

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

В налоговой таблице процент  увеличивается в соответствии с  увеличением налогооблагаемого  дохода. Элементы таблицы доходов  содержат максимальные величины для  каждого шага:

TAXTBL DD 100000,250000,425000,600000,999999

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

u если меньше или равно, то использовать соответствующий процент и поправку;

u если больше, то перейти к следующему элементу таблицы.

Таблицы с элементами переменной длины

Существуют таблицы, в которых элементы имеют переменную длину. Каждый элемент такой таблицы  может завершаться специальным  символом ограничителем, например, шест.00; конец таблицы можно обозначить огpаничителем шест.FF. В этом случае необходимо гарантировать, чтобы внутри элементов таблицы не встречались указанные ограничители. Помните, что двоичные числа могут выражаться любыми битовыми комбинациями. Для поиска можно использовать команду SCAS.

4

Транслирующая команда XLAT

Команда XLAT транслирует  содержимое одного байта в другое предопределенное значение. С помощью  команды XLAT можно проверить корректность содержимого элементов данных. При  передаче данных между персональным компьютером и ЕС ЭВМ (IBM) с помощью  команды XLAT можно выполнить перекодировку данных между форматами ASCII и EBCDIC.

В следующем примере происходит преобразование цифр от 0 до 9 из кода ASCII в код EBCDIC. Так как представление  цифр в ASCII выглядит как шест.30-39, а  в EBCDIC — шест.F0-F9, то замену можно выполнить командой OR. Однако, дополнительно преобразуем все остальные коды ASCII в пробел (шест.40) в коде EBCDIC. Для команды XLAT необходимо определить таблицу перекодировки, которая учитывает все 256 возможных символов, с кодами EBCDIC в ASCII позициях:

XLTBL DB 47 DUP(40H) ;Пробелы в коде EBCDIC

DB 0F0H,0F1H,0F2H,0F3H,...,0F9H ;0-9 (EBCDIC)

DB 199 DUP(40H) ;Пробелы в  коде EBCDIC 

 

Команда XLAT предполагает адрес  таблицы в регистре BX, а транслируемый  байт (например, поля ASCNO) в регистре AL. Следующие команды выполняют подготовку и трансляцию байта:

LEA BX,XLTBL

MOV AL,ASCNO

XLAT

Команда XLAT использует значение в регистре AL в качестве относительного aдреса в таблице, то есть, складывает адрес в BX и смещение в AL. В случае, если, например, ASCNO содержит 00, то адрес байта в таблице будет XLTBL+00 и команда XLAT заменит 00 на шест.40 из таблицы. В случае, если поле ASCNO cодержит шест.32, то адрес соответствующего байта в таблице будет XLTBL+50. Этот байт содержит шест.F2 (2 в коде EBCDIC), который команда XLAT загружает в регистр AL.

4

Операторы типа, длина и размеры

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

Рассмотрим определение  следующей таблицы из десяти слов:

TABLEX DW 10 DUP(?) ;Таблица из 10 слов

Программа может  использовать оператор TYPE для определения  типа (DW в данном случае), оператор LENGTH для определения DUP-фактора (10) и оператор SIZE для определения числа байтов (10 х 2 = 20). Следующие команды иллюстрируют три таких применения:

MOV AX,TYPE

TABLEX ;AX=0002

MOV BX,LENGTH

TABLEX ;BX=000A (10)

MOV CX,SIZE

TABLEX ;CX=0014 (20)

Значения LENGTH и SIZE можно использовать для окончания  табличного поиска или сортировки. Например, если регистр SI содержит продвинутый адрес таблицы при осуществлении поиска, то проверка на конец таблицы может быть следующий:

CMP SI,SIZE

TABLEX

Важно:

u Для большинства применений, определяйте таблицы, имеющие родственные элементы одной длины и формата данных.

u Стройте таблицы на основе форматов данных. Например, элементы могут быть символьные или числовые длиной один, два и более байтов каждый. Может оказаться более практичным определение двух таблиц: одна, например, для трехсимвольных значений номеpов, а другая для двухбайтовых значений цен единиц товара. В процессе поиска адрес элементов таблицы номеров должен увеличиваться на 3, а адрес элементов таблицы цен — на 2. В случае, если сохранить число выполненных циклов при поиске на равно, то, умножив это число на 2 (SHL сдвиг влево на один бит), получим относительный адрес искомого значения цены. (Начальное значение счетчика циклов должно быть равно -1).

u Помните, что DB позволяет определять значения, не превышающие 256, а DW записывает байты в обратной последовательности. Команды CMP и CMPSW предполагают, что байты в сравниваемых словах имеют обратную последовательность.

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

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

Лекция 7. 
Свойства операторов работы с экраном

4

Команда прерывания INT

Ранее мы имели  дело с программами, в которых  данные oпределялись в операндах  команд (непосредственные данные) или  инициализировались в конкретных полях  программы. Число практических применений таких программ в действительности мало. Большинcтво программ требуют ввода данных с клавиатуры, диска или модема и обеспечивают вывод данных в удобном формате на экран, принтер или диск. Данные, предназначенные для вывода на экран и ввода с клавиатуры, имеют ASCII формат.

Для выполнения ввода и вывода используется команда INT (прерывание).

Существуют различные  требования для указания системе  какое действие (ввод или вывод) и  на каком устройстве необходимо выполнить. Все необходимые экранные и клавиатурные операции можно выполнить используя команду INT 10H, которая передает управление непосредственно в BIOS. Для выполнения некоторых более сложных операций существует прерывание более высокого уровня INT 21H, которое сначала передает управление в DOS. Например, при вводе с клавиатуры может потребоваться подсчет введенных символов, проверку на максимальное число символов и проверку на символ Enter. Преpывание DOS INT 21H выполняет многие из этих дополнительных вычислений и затем автоматически передает управление в BIOS.

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

u уменьшает указатель стека на 2 и заносит в вершину стека содержимое флагового регистра;

u очищает флаги TF и IF;

u уменьшает указатель стека на 2 и заносит содержимое регистра CS в стек;

u уменьшает указатель стека на 2 и заносит в стек значение командного указателя;

u обеспечивает выполнение необходимых действий;

u восстанавливает из стека значение регистра и возвращает управление в прерванную программу на команду, следующую после INT.

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

4

Установка курсора

Экран можно  представить в виде двумерного пространства с адресуемыми позициями в любую из которых может быть установлен курсор. Обычный видеомонитор, например, имеет 25 строк (нумеруемых от 0 до 24) и 80 столбцов (нумеруемых от 0 до 79).

Команда INT 10H включает в себя установку курсора в любую позицию и очистку экрана. Ниже приведен пример установки курсора на  
5-ю строку и 12-й столбец:

MOV AH,02 ;Запрос на установку курсора

MOV BH,00 ;Экран 0

MOV DH,05 ;Строка 05

MOV DL,12 ;Столбец 12

INT 10H ;Передача управления  в BIOS 

 

Значение 02 в регистре AH указывает  команде INT 10H на выполнение операции установки  курсора. Значение строки и столбца  должны быть в регистре DX, а номер  экрана (или страницы) в регистре BH (обычно 0). Содержимое других регистров  несущественно. Для установки строки и столбца можно также использовать одну команду MOV c непосредственным шест. значением:

MOV DX,050CH ;Строка 5, столбец 12

4

Очистка экрана

Запросы и команды  остаются на экране пока не будут смещены  в результате прокручивания («скроллинга») или переписаны на этом же месте другими запросами или командами.

Когда программа начинает cвое выполнение, экран может быть очищен.

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

Начальное значение строки и столбца заносится в регистр DX, значение 07 — в регистр BH и 0600H в AX. В следующем примере выполняется очистка всего экрана:

MOV AX,0600H ;AH 06 (прокрутка) ;AL 00 (весь экран) 

MOV BH,07 ;Нормальный атрибут  (черно/белый) 

MOV CX,0000 ;Верхняя левая позиция

MOV DX,184FH ;Нижняя правая  позиция 

INT 10H ;Передача управления  в BIOS

Значение 06 в  регистре AH указывает команде INT 10H на выполнение операции очистки экрана.

Эта операция очищает экран  пробелами. В случае, если вы по ошибке установили нижнюю правую позицию больше, чем шест. 184F, то очистка перейдет вновь к началу экрана и вторично заполнит некоторые позиции пробелами.

4

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

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

Десятичные ASCII  Шестнадцатеричные

CR  13 0DH

LF  10  0AH

TAB  09  09H

Эти символы  при операциях ввода-вывода выполняют  одинаковые действия как в базовой, так и в расширенной версиях DOS. Например:

MESSAGE DB 09,'PC Users Group Annual Report',13,10

MOV AH,40H ;Запрос на вывод

MOV BX,01 ;Номер файла 

MOV CX,31 ;Длина текста 

LEA DX,MESSAGE ;Адрес текста 

INT 21H ;Вызов DOS

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

CR EQU 13 ;или EQU 0DH LF

EQU 10 ;или EQU 0AH TAB

EQU 09 ;или EQU 09H

MESSAGE DB TAB, 'PC Users Group Annual' DB 'Report', CR, LF 

 

 

  

 

 

 

4

Расширенные возможности экранных операций

Байт атрибутов

Байт атрибутов  в текстовом (не графическом) режиме определяет характеристики каждого  отображаемого символа. Байт-атрибут  имеет следующие 8 бит:

Фон  Текст

Атрибут:  BL R G B  I R G B

Номер битов: 7 6 5 u  3 2 1 0

Буквы RGB представляют битовые позиции, управляющие красным (red), зеленым (green) и синим (blue) лучом  в цветном мониторе. Бит 7 (BL) устанавливает  мигание, а бит 3 (I) — уровень яркости.

Для модификации  атрибутов можно комбинировать  биты следующим oбразом:

Эффект выделения

Фон Текст

RGB RGB

Неотображаемый (черный по черному)  000 000

Подчеркивание (не для цвета)  000 001

Нормальный (белый по черному)  000 111

Инвертированный (черный по белому)  111 000

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

Эффект выделения    Двоичный код Шест. код

Неотображаемый (для паролей)  0000 0000 00

Белый по черному (нормальный)  0000 0111 07

Белый по черному (мигание)  1000 0111 87

Белый по черному (яркий)   0000 1111 0F

Черный по белому (инвертированный) 0111 0000 70

Черный по белому (инверт. мигающий) 1111 0000 F0

Эти атрибуты подходят для текстового режима, как для  монохромных, так и для цветных  дисплеев. Для генерации атрибута можно использовать команду INT 10H. При этом регистр BL должен содержать значение байта-атрибута, а регистр AH один из следующих кодов: 06 (прокрутка вверх), 07 (прокрутка вниз), 08 (ввод атрибута или символа), 09 (вывод атрибута или символа).

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

Прерывание BIOS INT 10H

Прерывание INT 10H обеспечивает управление всем экраном. В регистре AH устанавливается код, определяющий функцию прерывания. Команда cохраняет содержимое регистров BX, CX, DX, SI и BP. Ниже описывается все возможные функции.

AH=00

Установка режима. Данная функция позволяет переключать  цветной монитор в текстовый или графический режим. Установка pежима для выполняемой в текущий момент программы осуществляется c помощью INT 10H.

AH=01

Установка размера  курсора. Курсор не является символом из набора ASCII-кодов. Компьютер имеет  собственное аппаратное обеспечение для управления видом курсора. Для этого имеется специальная обработка по INT прерыванию. Обычно символ курсоpа похож на символ подчеркивания.

AH=02

Установка позиции  курсора. Эта функция устанавливает  курcор в любую позицию на экране в соответствии с координатами cтроки и столбца.

Информация о работе Системное программирование