
- •5. Использование логических и сдвиговых операций.
- •6. Стандартные директивы определения сегментов.
- •7. Упрощенные директивы определения сегментов.
- •8. Организация и использование стека.
- •9. Структура программ типа .Com и .Exe.
- •10. Организация обслуживания прерываний. Типы прерываний. Таблица векторов прерываний.
- •11. Подпрограммы. Передача параметров. Ближние и дальние процедуры.
- •12. Повторяющиеся блоки и макросы.
- •13. Вывод информации на экран. Видеорежимы. Видеопамять
- •14. Строковые команды. Префиксы повторения.
- •15. Организация циклов, условных и безусловных переходов
- •16. Мультимодульные программы.
- •17. Обработчики прерываний и резидентные программы.
- •19. Интерфейс модулей, написанных на языке ассемблера с модулями, написанными на языке с.
- •20. Вызов из программы, написанной на языке с , процедур, написанных на ассемблере.
- •21. Вызов из ассемблерной программы функций на языке с.
- •22. Использование встроенного ассемблера.
- •26. Обработка переполнения при делении чисел. Числа ввести с клавиатуры
- •32. В сегменте данных расположены числа в формате двойного слова. С клавиатуры вводится число и определяется, имеется ли это число в сегменте данных.
- •35. Ввести с клавиатуры массив чисел. Найти суммы положительных и отрицательных чисел. Вывести результат.
- •42. Работа с окнами в текстовом режиме.
- •52. Определить, входит ли в строку, определенную в сегменте данных, подстрока, введенная с клавиатуры. Результат работы программы – текст соответствующего сообщения.
- •53. Выполнить реверс слов строки, определенной в сегменте данных (кода). Результат вывести.
- •54. Отсортировать слова в строке (по длине слова, по алфавиту).
- •55. Удалить из строки заданное слово.
- •58. В массиве подсчитать число элементов, лежащих в заданном диапазоне.
- •59. Арифметические операции со знаковыми и беззнаковыми числами.
- •60. Процедуры в ассемблере, передача параметров, возврат значений.
- •61. Операции с файлами: создание, открытие, закрытие.
- •62. Операции с файлами: чтение и запись данных.
7. Упрощенные директивы определения сегментов.
После того как модель памяти установлена, вступают в силу упрощенные директивы определения сегментов, объединяющие действия директив SEGMENT и ASSUME. Кроме того, сегменты, объявленные упрощенными директивами, не требуется закрывать директивой ENDS — они закрываются автоматически, как только ассемблер обнаруживает новую директиву определения сегмента или конец программы.
Директива .CODE описывает основной сегмент кода
.code имя_сегмента
NAME_TEXT. .stack размер
Директива .STACK описывает сегмент стека. Необязательный параметр указывает размер стека. По умолчанию он равен 1 Кб.
.data
Описывает обычный сегмент данных
.data?
Описывает сегмент неинициализированных данных:
Этот сегмент обычно не включается в программу, а располагается за концом памяти, так что все описанные в нем переменные на момент загрузки программы имеют неопределенные значения.
.const
Описывает сегмент неизменяемых данных.
.fardata имя_сегмента
Сегмент дальних данных. Доступ к данным, описанным в этом сегменте, потребует загрузки сегментного регистра.
8. Организация и использование стека.
Стек - нек. область оперативной памяти которая исп. механизм безадресной записи и выборки данных. Эти механизмы работают : последний запис. - первый выбранный. Адрес сегмента памяти в кот. нах. стек определ. в регистре ss. ЄAaВершина стека в sp. Для 16 бит. процессора данные в стек помещ. в виде слов. ss:sp - в любой момент определ. вершина. push - занести в стек. (sp уменьш на 2). Для извлечения слова из стека исп. команда типа pop, при этом снач. произв. чтение слова, а потом sp увелич на 2. Особенности: 1)Несмотря на то что знач. sp можно изменять, этого делать не следует, т.к. стек исп. довольно часто и не только самой программой(но и при вызове различных подпрограмм). ОП могут исп. стек при вызове сервисных процедур. 2) Необходимо обращ. внимание для выделения памяти для стека. Для адрес. данных стека можно исп. bp (можно рассматр. как базовый регистр в сегменте стека и находить данные в стеке через смещение заданные относит. этого регистра).
Оперативная память
Сегмент кода
Сегмент данных
Сегмент стека
Вершина стека
Дно стека
9. Структура программ типа .Com и .Exe.
Программа в формате ЕХЕ, созданная компоновщиком, состоит из следующих двух частей:
1) заголовка - записи, содержащей информацию по управлению и настройке программы;
2) собственно загрузочного модуля.
В заголовке находится информация о размере выполняемого модуля, области загрузки в памяти, адресе стека и относительных смещениях, которые должны заполнить машинные адреса в соответствии с относительными шестнадцатеричными позициями:
Заголовок имеет минимальный размер 512 байт и может быть больше , если программа содержит большое число настраиваемых элементов. Позиция 06 в заголовке указывает число элементов в выполняемом модуле, нуждающихся в настройке. Каждый элемент настройки в таблице, начинающейся в позиции 1С заголовка, состоит из 2-х байтовых величин смещений и 2-х байтовых сегментных значений. Система строит префикс программного сегмента (PSP) следом за резидентной частью COMMAND.COM, которая выполняет операцию загрузки.
Различия между программами в ЕХЕ и СОМ файлах:
- РАЗМЕР ПРОГРАММЫ. Программа в формате ЕХЕ может иметь любой размер, в то время как СОМ-файл ограничен размером одного сегмента и не превышает 64 К. Размер СОМ - файла всегда меньше, чем размер соответствующего ЕХЕ-файла; одна из причин этого - отсутствие в СОМ - файле 512-байтового заголовка ЕХЕ-файла.
- СЕГМЕНТ СТЕКА. В ЕХЕ-программе определяется сегмент стека, в то время как СОМ-программа генерирует стек автоматически. Таким образом, при создании ассемблерной программы, которая будет преобразована в СОМ - файл, стек должен быть опущен.
- СЕГМЕНТ ДАННЫХ. В ЕХЕ-программе обычно определяется сегмент данных, а регистр DS инициализируется адресом этого сегмента. В СОМ-программе все данные должны быть определены в сегменте кода.
- ИНИЦИАЛИЗАЦИЯ. В ЕХЕ-программе выполняется инициализация регистра DS. Так как в СОМ-программе стек и сегмент данных не определены, то эти шаги отсутствуют. Когда СОМ-программа начинает работать, все сегментные регистры содержат адрес PSP - 256 байтовый блок, который резервируется операционной системой DOS непосредственно перед СОМ- или ЕХЕ-программой в памяти.