
- •1. Эволюция операционных систем Операционные системы
- •Эволюция ос
- •2. Операционные системы (ос). Классификация ос по особенностям алгоритмов управления.
- •4. Поддержка многонитевости систем
- •3. Операционная система. Классификация спо по особенности аппаратных платформ.
- •1. Ос больших машин
- •Особенности методов построения.
- •5. Процесс, состояния процесса, свойства процессов.
- •Свойства процессов.
- •Процесс. Классификация процессов.
- •7. Ресурс, свойства ревурсов.
- •Свойства ресурсов
- •Ресурсы. Классификация ресурсов
- •6.По функциональной избыточности (изменчивости):
- •8.По восстанавливаемости:
- •9.По характеру использования:
- •Реализация понятия последовательного процесса в операционной системе
- •Потоки (нити, треды)
- •Дисциплины диспетчеризации
- •Планирование и диспетчеризация процессов и задач
- •10. Прерывания
- •Виды прерываний:
- •Дисциплины диспетчеризации
- •12. Архитектура ос.
- •Вспомогательные модули
- •Средства аппаратной поддержки ос
- •Микроядерная архитектура
- •2.Расширяемость
- •15. Файловая система. Структура магнитного диска.
- •16. Физическая организация fat
- •Загрузочная запись dos
- •17. Файловая система hpfs
- •Структура раздела hpfs.
- •18. Ntfs
- •19.Проектирование взаимодействующих вычислительных процессов (взаимное исключение). Синхронизация посредством операции ‘проверка - устаовка’.Семафоры.
- •1.Проектирование взаимодействующих вычислительных процессов (взаимное исключение).
- •2.Синхронизация посредством операции«проверка и установка»
- •3.Семафоры
- •20. Мониторы хоара. Почтовые ящики, конвейеры, тупики. Мониторы хоара.
- •Почтовые ящики
- •Конвейеры
- •Тупики:
- •21. Структура современных систем программирования.
- •22. Основные принципы построения транслятора.
- •4. Построение на основе хэш – функции.
- •23. Лексический анализатор, синтаксический разбор основные принципы построения транслятора.
- •24. Семантический анализ, подготовка к генерации кода, генерация кода основные принципы построения транслятора.
- •25. Регистры общего назначения. Команда mov.
- •Команда mov.
- •26. Назначение сегментов. Реализация арифметических операций на ассемблере. Назначение сегментов
- •Операция умножения
- •Операция деления
- •Определение данных. Организация условного и безусловного перехода на ассемблере
- •28. Логика и организация циклических вычислений с помощью команды loop
- •Команды логических операций
- •29. Регистрфлагов
- •30. Команды обработки строковых данных в ассемблере.
- •Команды обработки строк
- •31. Понятие объектно-ориентированной модели программных компонент delphi
- •31. Структура интерфейса визуальной среды delphi
- •35. Объект: понятие, свойства.
- •Понятие Свойства и События
- •34.Основные события
- •32.Описание и назначение основных компонент выбора вариантов стандартной панели
- •Отладка модулей проекта
- •Отладка синтаксических ошибок
- •Отладка логических ошибок
- •37. Графические компоненты
Определение данных. Организация условного и безусловного перехода на ассемблере
Определение данных
Сегмент данных предназначен для определения констант, рабочих полей и областей для ввода – вывода. В соответствии с имеющимися директивами в ассемблере разрешено определение данных различной длины. Элемент данных может содержать непосредственное значение или константу, определённую как символьная строка или как числовое значение. Другой способ определения константы – непосредственное значение, т.е. значение, указанное прямо в ассемблерной команде, например:
MOV AL, 20H
В этом случае шестнадцатеричное число 20 становится частью машинного объектного кода. Непосредственное значение ограничено одним байтом или словом, но там, где его можно применять, оно более эффективно, чем использование константы.
Ассемблер обеспечивает два способа определения данных: во-первых, через указание длины данных и, во-вторых, по их содержимому. Основной формат определения данных:
[имя] Dn выражение
• Имя элемента данных не обязательно (это указывается квадратными скобками), но если в программе имеются ссылки на некоторый элемент, то это делается посредством имени.
• Для определения элементов данных имеются следующие директивы: DB, DW, DD, DQ, DT.
• Выражение может содержать константу, например:
FLO1 DB 25,
или знак вопроса для неопределённого значения, например:
FLO2 DB ?
Выражение может содержать несколько констант, разделённых запятыми и ограниченных только длиной строки:
FLO3 DB 11, 12, 13, 14, 15, 16, ….
Ассемблер определяет эти константы в виде последовательности смежных байтов. Ссылка по имени FLO3 указывает на первую константу 11, по FLO3+1 - на вторую, 12. Например, команда
MOV AL, FLO3+4
загружает в регистр значение 14(0ЕН). Выражение также допускает повторение константы в следующем формате:
[имя] Dn число повторений DUP (выражение)
Следующие два примера иллюстрируют повторение:
DW 10 DUP (?) ; Десять неопределённых слов
DB 5 DUP (14) ; Пять байт, содержащих 14.
Выражение может содержать символьную строку или числовую константу. Числовые константы применяются для арифметических значений и для адресов памяти. Для описания числовой константы ковычки не ставятся. Ассемблер преобразует все числовые константы в шестнадцатиричные и записывает байты в объектном коде в обратной последовательности – справа налево. Существуют следующие числовые форматы:
Дсятичный формат. Десятичный формат допускает десятичные цифры от 0 до 9 и обозначается последней буквой , которую можно не указывать, например 125 или 125D, Несмотря на то что ассемблер позволяет кодирование в десятичном формате, он преобразует эти значения в шестнадцатиричный объектный код.
Шестнадцатиричный формат. Шестнадцатиричный формат допускает цифры от 0 до F и обозначается в конце буквой Н. Так как ассемблер полагает, что с буквы начинаются идентификаторы, то первой цифрой шестнадцатиричной константы должна быть цифра от 0 до 9. Например, 2ЕН или 0FFFH ассемблер преобразует соответственно в 2Е и FF0F (байты во втором случае записываются в объектный код в обратной последовательности).
Двоичный формат. Двоичный формат допускает двоичные цифры 0 и 1 и обозначается в конце буквой В. Двоичный формат обычно используется для более чёткого представления битовых значений в логических командах
Восьмиричный формат. Восямиричный формат допускает восьмиричные цифры от 0 до 7 и обозначается последней буквой Q, например 253. На сегодняшний день восьмиричный формат используется редко.
Директива определения байта (DB)
Из различных директив, определяющих элементы данных, чаще используется директива DB. Числовое выражение в директиве DB может содержать одну однобайтовую константу или более. Один байт выражается двумя шестнадцатиричными цифрами. Наибольшее положительное шестнадцатиричное число в одном байте – это 7F, все ”большие„ числа от 80 до FF представляют отрицательные значения.
Директива определения слова (DW)
Директива DWопределяет элементы, которые имеют длину в одно слово (два байта). Числовое выражение вDWможет содержать одну или более двухбайтовую константу. Два байта представляются четырьмя шестнадцатиричными цифрами. Наибольшее положительное шестнадцатиричное число в двух байтах – это 7FFF; все ”большие„ числа от 8000 доFFFFпредставляют отрицательные значения.
Директива определения двойного слова (DD)
Директива DDопределяет элементы, которые имеют длину в два слова (четыре байта). Числовое выражение вDDможет содержать одну или более константу, каждая из которых имеет максимально четыре байта ( восемь шестнадцатиричных цифр). Наибольшее положительное шестнадцатиричное число в четырёх байтах – это 7FFFFFFF; все ”большие„ числа от 80000000 доFFFFFFFFпредставляют отрицательные значения. Ассемблер преобразует все числовые константы в директивеDDв шестнадцатиричное представление, но записывает объектный код в обратной последовательности.
Директива определения поля из четырёх слов (DQ)
Директива DQопределяет элементы, которые имеют длину четыре слова (восемь байт). Числовое выражение вDQможет содержать одну или более констант, каждая из которых имеет максимум восемь байт или 16 шестнадцатиричных цифр.
Директива определения десяти байт (DT)
Директива DT определяет элементы данных, имеющие длину в десять байт. По директиве DT генерируются различные константы в зависимости от версии ассемблера.
Логика и организация программы.
До этого момента примеры выполнялись последовательно команда за командой. Однако, программируемые задачи редко бывают так просты. Большинство программ содержат ряд циклов, в которых несколько команд повторяются до достижения определенного требования, и различные проверки, определяющие какие из нескольких действий следует выполнять. Обычным требованием является проверка - должна ли программа завершить выполнение. Эти требования включают передачу управления по адресу команды, которая не находится непосредственно за выполняемой в текущий момент командой. Передача управления может осуществляться вперед для выполнения новой группы команд или назад для повторения уже выполненных команд Некоторые команды могут передавать управление, изменяя нормальную последовательность шагов непосредственной модификацией значения смещения в командном указателе. Ниже приведены три способа передачи управления :
Безусловный переход: JMP
Цикл: LOOP
Условный переход: Jnnn (больше,меньше,равно)
Следует отметить что имеется три типа адресов: SHORT, NEAR и FAR. Адресация SHORT используется при циклах, условных пеpеходах и некоторых безусловных переходах. Адресация NEAR и FAR используется для вызовов процедур (CALL) и безусловных переходов, которые не квалифицируются , как SHORT. Все три типа передачи управления воздействуют на содержимое регистра IP; тип FAR также изменяет регистр CS.
Команда JMP . Одной из команд обычно используемых для передачи управления является команда JMP. Эта команда выполняет безусловный переход, т.е. обеспечивает передачу управления при любых обстоятельствах. В следующей процедуре используется команда JMP. В pегистры AX, BX, и CX загружается значение 1, и затем в цикле выполняются следующие операции:
прибавить 1 к регистру AX,
прибавить AX к BX,
удвоить значение в регистре CX.
Повторение цикла приводит к увеличению содержимого регистра AX: 1,2,3,4..., регистра BX: 1,3,6,10..., и регистра CX: 1,2,4,8... Начало цикла имеет метку, в данном случае, A20: - двоетичие oбозначает, что метка находится внутри процедуры в сегменте кода. В конце цикла находится команда
JMP A20
которая указывает на то, что управление должно быть передано команде c меткой A20. Следует обратить внимание, что адресная метка в операнде команды указывается без двоеточия. Данный цикл не имеет выхода и приводит к бесконечному выполнению - такие циклы обычно не используются.
0100 MAIN PROC NEAR
0100 B8 0001 MOV AX,01 ;Инициализация AX,
0103 BB 0001 MOV BX,01 ; BX,
0106 B9 0001 MOV CX,01 ; и CX
0109 A20:
0109 05 0001 ADD AX,01 ;Прибавить 01 к AX
010C 03 D8 ADD BX,AX ;Прибавить 01 к BX
010У В1 У1 ЫРД СЧб1 жУдвоить СЧ
0110 EB F7 JMP A20 ;Переход на A20
0112 МAIN ENDP
Метку можно кодировать на одной строке с командой:
A20: ADD AX,01
или на отдельной строке:
A20:
ADD AX,0
В обоих случаях адрес A20 указывает на первый байт команды ADD. Двоеточие в метке A20 указывает на тип метки - NEAR. Отсутствие двоеточия в метке является частой ошибкой. В нашем примере A20 соответствует -9 байтам от команды JMP, в чем можно убедиться по объектному коду команды - EBF7. EB представляет собой машинный код для короткого перехода JMP, а F7 - отрицательное значение смещения (-9). Команда JMP прибавляет F7 к командному указателю (IP), котоpый содержит адрес команды после JMP (0112):
Дес. Шест.
Командный указатель: 274 112
Адрес в команде JMP: -9 F7 (двоичное дополнение)
Адрес перехода: 265 109
В результате сложения получается адрес перехода - шест. 109. Проверьте по листингу программы, что относительный адрес метки действительно соответствует шест.109. Соответственно операнд в команде JMP для перехода вперед имеет положительное значение.
Команда JMP для перехода в пределах -128 до +127 байт имеет тип SHORT. Ассемблер генерирует в этом случае однобайтовый операнд в пределах от 00 до FF. Команда JMP, превосходящая эти пределы, получает тип FAR, для которого генерируется другой машинный код и двухбайтовый операнд.
Ассемблер в первом просмотре исходной программы пределяет длину каждой команды. Однако, команда JMP может быть длиной два или три байта. Если к моменту просмотра команды JMP ассемблер уже вычислил значение опеpанда (при переходе назад):
A50:
...
JMP A50
то он генерирует двухбайтовую команду. Если ассемблер еще не вычислил значение операнда (при переходе вперед)
JMP A90
...
A90:
то он не знает тип перехода NEAR или FAR, и автоматически генерирует 3-х байтовую команду. Для того, чтобы указать ассемблеру на необходимость генерации двухбайтовой команды, следует использовать оператор SHORT:
JMP SHORT A90
...
A90:
Команды условного перехода.
В предыдущих примерах было показано, что команда LOOP уменьшает на единицу содержимое регистра CX и проверяет его: если не ноль, то управление передается по адресу, указанному в операнде. Таким образом, передача управления зависит от конкретного состояния. Ассемблер поддерживает большое количество команд условного перехода, которые осуществляют передачу управления в зависимости от состояний флагового регистра. Например, при сравнении содержимого двух полей последующий переход зависит от значения флага.
Команду LOOP в процедуре можно заменить на две команды: одна уменьшает содержимое регистра CX, а другая выполняет условный переход:
Использование LOOP Использование условного перехода
LOOP A20 DEC CX
JNZ A20
Команды DEC и JNZ действуют аналогично команде LOOP: уменьшают содержимое регистра CX на 1 и выполняет переход на метку A20, если в CX не ноль. Команда DEC кроме того устанавливает флаг нуля во флаговом регистре в состояние 0 или 1. Команда JNZ затем проверяет эту установку. В рассмотренном примере команда LOOP хотя и имеет ограниченное использование, но более эффективна, чем две команды: DEC и JNZ.
Аналогично командам JMP и LOOP операнд в команде JNZ cодержит значение расстояния между концом команды JNZ и адресом A20, которое прибавляется к командному указателю. Это расстояние должно быть в пределах от -128 до +127 байт. В случае перехода за эти границы ассемблер выдаст сообщение "Relative jump out of range" (превышены относительные границы перехода).
Рассматривая назначение команд условного перехода следует пояснить характер их использования. Типы данных, над которыми выполняются арифметические операции и операции сравнения определяют какими командами пользоваться: беззнаковыми или знаковыми. Беззнаковые данные используют все биты как биты данных; характерным примером являются символьные строки: имена, адреса и натуральные числа. В знаковых данных самый левый бит представляет собой знак, причем если его значение равно нулю, то число положительное, и если единице, то отрицательное. Многие числовые значения могут быть как положительными так и отрицательными.
В качестве примера предположим, что регистр AX содержит 11000110, а BX - 00010110. Команда
CMP AX,BX
сравнивает содержимое регистров AX и BX. Если данные беззнаковые, то значение в AX больше, а если знаковые - то меньше.
Команда CMP сравнивает содержимое двух полей данных. Фактически эта команда вычитает второй операнд из первого, но содержимое полей не изменяет. Операнды должны иметь одинаковую длину: байт или слово. Команда может сравнивать содержимое регистра, памяти или непосредственное значение с содержимым регистра; или содержимое регистра или непосредственное значение с содержимым памяти
Переходы для беззнаковых данных.
Мнемоника Описание Проверяемые флаги
JE/JZ Переход, если равно/нуль ZF
JNE/JNZ Переход, если не равно/не нуль ZF
JA/JNBE Переход, если выше/не ниже или равно ZF,CF
JAE/JNB Переход, если выше или равно/не ниже CF
JB/JNAE Переход, если ниже/не выше или равно CF
JBE/JNA Переход, если ниже или равно/не выше CF,AF
Любую проверку можно кодировать одним из двух мнемонических кодов. Например, JB и JNAE генерирует один и тот же объектный код, хотя положительную проверку JB легче понять, чем отрицательную JNA
Переходы для знаковых данных.
Мнемоника Описание Проверяемые флаги
JE/JZ Переход, если равно/нуль ZF
JNE/JNZ Переход, если не равно/не нуль ZF
JG/JNLE Переход, если больше/не меньше или равно ZF,SF,OF
JGE/JNL Переход, если больше или равно/не меньше SF,OF
JL/JNGE Переход, если меньше/не больше или равно SF,OF
JLE/JNG Переход, если меньше или равно/не больше ZF,SF,OF
Команды перехода для условия равно или ноль (JE/JZ) и не равно или не ноль (JNE/JNZ) присутствуют в обоих списках для беззнаковых и знаковых данных. Состояние равно/нуль происходит вне зависимости от наличия знака.
Специальные арифметические проверки
Мнемоника Описание Проверяемые флаги
JS Переход, если есть знак (отрицательно) SF
JNS Переход, если нет знака(положительно) SF
JC Переход, если есть перенос (аналогично JB) CF
JNC Переход, если нет переноса CF
JO Переход, если есть переполнение OF
JNO Переход, если нет переполнения OF
JP/JPE Переход, если паритет четный PF
JNP/JP Переход, если паритет нечетный PF