
- •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. Операции с файлами: чтение и запись данных.
16. Мультимодульные программы.
Рассмотрим пути создания программ из нескольких модулей.
Каждый компилируется по отдельности, затем компоновщик объединит в одну программу.
3 директивы:
• public
• extrn
• global
public [язык] метка [, [язык] метка…]
Определяет метки программы, которые будут доступны в других программах.
.data
public my_equ, my_var
my_equ equ 25
my_var dd 12345678h
.code
public my_proc
my_proc proc …
extrn определение [, определение…]
определение = [язык] метка:тип[:количество повторений]
Определяет какие метку будут взяты из другого модуля.
Тип: ABS (константа), BYTE, WORD,…, FAR, NEAR, PROC
global определение [, определение…]
Объединяет функции public и extrn.
.data
global my_out:dataptr, my_in:word …
my_in dw 10
.code
global my_out_code:near, my_in_code:far
my_in_code proc far …
call my_out_code
…
17. Обработчики прерываний и резидентные программы.
Посредством прерывания работы микропроцессора можно приостанавл. работу текущей программы и осущ. запуск другой программы.Прерывания: 1)Внешние;2)Внутренние. Каждому прерыв. ставятся в соотв. 4-х байтный вектор с номером 0<n<255. Все векторы можно размещать по порядку в младш. килобайте памяти. Любой из них задает точку входа или старт адрес программы для обслуж. треб ситуации. В виде сегмент. прогр:смещ. прогр. Внешн прер. вызываются на входе INTR(запрос маскируемого прерывания и на NMI(немаскер. прерывание). Если признак I в регистре флаг = 0, сигнал на входе INTR не распознается и прерывание не происх. При I=1 и налич сигнала INTR возник маскируемое прерывание. Действие кот. будет при этом выполн.:1) На вход INTR - поступ. запрос прерывание;2) Послед. действия определ. допустимой ситуацией:а) ожид. завершение текущей команды; б)-||- сл. команды;в) запрос обраб во время вып. текущей команды.---В нек случаях сигнал INTR распазн только при б).--Имеются 2 случ. когда в): 1..При строковых командах с повторением.2.. При вып. команды wait. 3) Микропроц. выраб. 2 сигнала подтверждения INTX. 4) По шине адресов/данных в микропроц. передается байт с номером n прерываний. 5) Текущее содерж. регистра признаков и регистра CS и IP загруж. в стек. В стек загруж. IP соответ. смещениюкоманды перед которой возникло прерыв. 6) Признаки I,T сбрасываются в 0.7)В CS:IP загруж. содержимое вектора n. 8) Выполн. программа обработки прерывания. 9) В конце обработки прерыв. команда iret восстан. знач. регистра IP,ES и FL.10)Прерванная программа продолж. свое выполнение.
Внутренне прерывание возникает либо при появлении некоторых микро сигналов внутри микропроцессора либо по команде внутри программы
+cм 18
18. Структура резидентной программы. См пред.пункт.
Резидентные программы.
Программы, кот. ост. в памяти после возврата действия в ДОС носят назв. резидентных. Блоки памяти в которых сидят резиденты ОС отмечает как занятые. Прерывания делятся: 1) Аппаратные: - маскируемые; - немаскируемые; 2) Программные: - прерывания BIOS; - прерывания DOS; пользовательские; 3) Исключительные ситуации: - ошибки; - ловушки; - аварийное завершение. Они вызываются процессором при возникновении ошибки(00 h – 1Fh) и поддерживаются только в защищенном режиме. Сущ. 2 способа оставить программу резидентной: 1) с помощью int 21h (ah=31h; al=код возврата; dx=размер резидента в 16-байтных параграфах включая PSP; cs=сегмент резидента). 2) int 27h – оставить программу резидентной(dx= адрес последнего байта программы; cs = сегмент резидента). 1-ый исп. когда резиденты большого размера и явл. exe. Резиденты небольшого размера, реализуются в виде com и ост. в памяти обработчиком int 27h. Резиденты – активные (перехватывают прерывания от внешних устройств) и пассивные (активизируются при вып. команды int с нужным номером). Способы установки векторов прерывания: 1) непосредственным обращением к соотв. байтам( xor ax,ax---mov es,ax---mov ax,es:[9*4]---mov int_ofs,ax---mov ax,es:[9*4+2]---mov int_seg,ax---Установить адрес входа в собственный обработчик также можно напрямую, путем модификации таблицы векторов(запрещает прерывание т.к. недопустимо чтобы INT_NUM появилось в момент, когда изменяем вектор.--- push 0---pop es---mov bx,INT_NUM---shl bx,2---mov ax,seg ISR---shl eax,16---mov ax,offset ISR---mov es:[bx],eax---sti). В многозадачной среде ОС может поддерживать несколько таблиц векторов прерываний, и реальный физический адрес может быть известен только DOS. 2) Используя функции DOS. Функция 35h получает адрес обработчика.(Вход ah=35h,al=номер прерывания; выход es:bx=адрес обработчика). 25h – устанавливает адрес входа в обработчик.(вход ah=25h; al=номер прерывания; ds:dx = адрес нового обработчика; выход – ничего).