Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОГРАММНАЯ ИНЖЕНЕРИЯ.docx
Скачиваний:
115
Добавлен:
09.09.2018
Размер:
2.83 Mб
Скачать

Операционные системы

  1. Понятия сегмента и сегментной адресации.

  2. Регистры. Типы программ: программы типа EXE , программы типа COM. Деление программы на сегменты.

  3. Использование сегментных регистров для адресации различных сегментов программы.

  4. Способы адресации данных на ассемблере

  5. Математические операции языка Ассемблер.

  6. Переполнение.

  7. Виды переполнений, возникающих при математических операциях на Ассемблере.

  8. Понятие безусловного перехода.

  9. Виды безусловных переходов.

  10. Понятие условного перехода.

  11. Виды условных переходов.

  12. Применение условных и безусловных переходов для управления процессом на языке ассемблер.

  13. Оператор цикла.

  14. Применение оператора цикла.

  15. Использование стека для организации вложенного цикла.

  16. Понятие подпрограммы.

  17. Особенности написания подпрограмм на языке Ассемблер.

  18. Понятие ближней, дальней подпрограммы.

  19. Особенности написания и использование ближней и дальней подпрограмм. Передача данных в подпрограмму.

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

  21. Прерывания DOS и BIOS.

  22. Назначение и использование различных прерываний и их функций.

  23. Понятие вектора прерывания.

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

  25. Нахождение в памяти адреса вектора прерывания.

  26. Получение и установление собственного вектора прерывания с помощью функций прерывания INT 21h.

  27. Изменение существующего прерывания.

  28. Написание собственного прерывания.

  29. Добавление в существующее прерывание.

  30. Понятие ядра операционной системы.

  31. Виды ядер ОС.

1.Понятия сегмента и сегментной адресации

Data segment (DS). Вся оперативная память разбита на сегменты, то есть она сегментирована. Если рассмотреть целую оперативную память, то адресовать её можно как всю, просто начиная от 0 до FFffFFff (4 байта FF), а можно разбить на сегменты и смещение в сегменте. Сегменты разбиваются по 256^2 байт (64 килобайт),программа записывается в отдельный сегмент (-ы),

Сегмент в визуальном представлении ОС разделены «:», а программа начинается с «0», то есть с нулевого смещения, то есть она целиком находится в каом-то сегменте. Например, если мы видим адрес 0002:13F4, то «0002» - номер сегмента, а «13F4» - байт, который нас интересует, внутри этого сегмента.

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

Например,

DS - это «0002» (дата сегмента, в котором находятся данные)

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

Сегментом называется условно выделенная область адресного пространства определённого размера, а смещением — адрес ячейки памяти относительно начала сегмента. Базой сегмента называется линейный адрес (адрес относительно всего объёма памяти), который указывает на начало сегмента в адресном пространстве. В результате получается сегментный (логический) адрес, который соответствует линейному адресу база сегмента+смещение и который выставляется процессором на шину адреса.

2. Регистры

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

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

Регистры общего назначения - это 16-разрядные регистры АХ, ВХ, СХ, DX, каждый из которых состоит из двух 8-разрядных регистров, например, АХ состоит из АН (старшая часть) и AL (младшая часть).

Функция регистра определяется командами, но есть и стандартные функции:

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

BX – для хранения адреса данных, так же вычислительный регистр.

CX – счётчик, число повторений одной команды

DX – Для расширителя памяти, для вычислений повышенной точности.

Регистры указателя (BB, SI, DI, SP, IP) – для хранения адресов памяти

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

Регистры сегментов – 16-разрядные регистры, позволяющие организовать память в виде совокупности 4-ёх различных сегментов.

CS – сегмент кода (команд)

DS – сегмент данных

SS – сегмент стека

ES – сегмент до­полнительной области памяти, используемой для хранения данных.

Регистр флагов – 16-разрядные регистр, определяющие код условия, состояние микропроцессора. Биты называются флагами.

OF (переполнение) – объём результатов превышает размер ячейки назначения – 1

DF (направление) - 0 – инкрементация, 1 –декрементации

IF (признак разрешения прерывания) - прерывания разрешены, если IF=1. Если IF=0, то распознаются лишь немаскированные прерывания;

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

Регистр SP. Указатель стека обеспечивает использование стека в памяти, позволяет временно хранить адреса и иногда данные. Этот регистр связан с регистром SS для адресации стека.

Регистр BP. Указатель базы облегчает доступ к параметрам (данным и адресам, переданным через стек).

Доступ к значениям, хранящимся в регистрах, как правило, в несколько раз быстрее, чем доступ к ячейкам оперативной памяти (даже если кеш-память содержит нужные данные), но объём оперативной памяти намного превосходит суммарный объём регистров (объём среднего модуля оперативной памяти сегодня составляет 1-4 Гб[4], суммарная «ёмкость» регистров общего назначения/данных для процессора Intel 80x86 16 битов * 4 = 64 бита (8 байт)).

3. Типы программ: программы типа EXE , программы типа COM.

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

Размер COM - файла ограничен 64 кб, т.е. размером одного сегмента памяти

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

EXE – файл: Состоять EXE файлы могут из нескольких сегментов, следовательно их размер не ограничен 64 кб. По структуре EXE файл сложнее, кроме кода программы в файле также содержится: заголовок файла, таблица настройки адресов, данные и т.п.

Примерная структура EXE файла:

Заголовок EXE файла

Тело программы

Конец программы

Заголовок EXE файла - содержит данные необходимые для загрузки программы

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

Конец программы - завершающая часть программы, которая сохраняет нужные и удаляет ненужные данные из ОЗУ, закрывает все открытые данной программой файлы и т.п.

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

COM – файл:

Наберите в любом текстовом редакторе текст, показанный в листинге 2.1, и сохраните его под именем hello1.asm.

Листинг 2.1. Программа типа COM (hello1.asm)

.model

tiny

.code

 

org

100h

start: mov

ah,9

mov

dx,offset message

int

21h

ret

 

message

db "Hello, World!",0Dh,0Ah,'$'

end start

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

В пакет MASM входит программа ml, которая позволяет выполнить автоматически трансляцию и линковку, для этого в командной строке необходимо выполнить такую команду:

ml hello1.asm

Если трансляция и линковка пройдет без ошибок, то в текущем каталоге появится файл hello1.com размером 24 байта. Если его выполнить, на экране появится фраза "Hello, World!" и программа сразу завершится.

Рассмотрим исходный текст программы, чтобы понять, как она работает. Директива .model tiny устанавливает модель памяти типа TINY.

Для COM-файловотведенаединственная модель памяти типа TINY, все остальные модели памяти используютсятолько в файлах типа EXE.

COM-файлыне содержат в себе никакой служебной информации, только код программы. Поэтому в отличие отEXE-файловони хранятся на диске точно в том же виде, что и в памяти. Кроме того,COM-файлни при каких обстоятельствах не может превышать размер 64 Кбайт (точнее немного меньше), так как он загружается в единственный сегмент, который одновременно является сегментом кода, данных и стека (модель памяти TINY). Директива.code начинает сегмент кода, который одновременно будет и сегментом данных и сегментом стека.

При загрузке в память COM-файлдолжен освободить первые 256 байт (100h) в памяти, кудаMS-DOSпоместит специальную служебную информацию, так называемыйпрефикс программного сегмента (PSP). Поэтому любая программа, предназначенная для ассемблирования вCOM-файлдолжна начинаться директивой

org 100h.

Метка start располагается перед самой первой командой в программе.

Команда mov ah,9 заносит в регистр AH число 9 — это номер функции DOS вывода строки на экран (адрес строки должен быть задан в регистрах DS:DX). Командаmov dx,offset message помещает в регистр DX адрес строкиmessage. Сегментный регистр DS будет автоматически заполнен при запускеCOM-файла.

Команда int 21h далее вызывает эту функцию на выполнение.

В MS-DOSстроки выводится на экран до первого встреченного символа $, поэтому строка "Hello, World!" завершается этим символом. Как поступить, когда нужно вывести на экран сам символ $ мы узнаем позже.

Код 0Dh является управляющим символом ASCII "возврат каретки", а код 0Ah символом ASCII "перевод строки". Эти два управляющих символа переводят курсор на первую позицию следующей строки.

Команда RET предназначена для выхода из процедуры, но в COM-файлахэта команда корректно завершает программу.

Директива END должна завершать код программы. Вместе с этой директивой всегда указывается метка, с которой начинается выполнение программы (start в нашем случае).

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

После загрузки программы типа COM ее образ в памяти будет выглядеть, как показано на рис. 2.1.

Образ программы начинается с префикса программного сегмента (PSP), который создается и заполняется системой. Объем PSP всегда равен 256 байтам. PSP содержит данные, используемые системой при выполнении программы (в разд. 2.8 структура PSP будет рассмотрена подробно). Как видите, программа типа COM состоит из единственного сегмента, в котором вместе располагаются код, данные и стек. Сегментные регистры (CS, DS, ES, SS) инициализируются автоматически и содержат одно и то же значение, указывающее на начало PSP. Значение регистра IP=100h.