
- •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. Операции с файлами: чтение и запись данных.
10. Организация обслуживания прерываний. Типы прерываний. Таблица векторов прерываний.
Посредством прерывания работы микропроцессора можно приостанавл. работу текущей программы и осущ. запуск другой программы.Прерывания: 1)Внешние;2)Внутренние. Каждому прерыв. ставятся в соотв. 4-х байтный вектор с номером 0<n<255. Все векторы можно размещать по порядку в младш. килобайте памяти. Любой из них задает точку входа или старт адрес программы для обслуж. треб ситуации. В виде сегмент. прогр:смещ. прогр. (Вектор прерывания - адрес!!!) Внешн прер. вызываются на входе INTR(запрос маскируемого прерывания и на NMI(немаскер. прерывание). Если признак I в регистре флаг = 0, сигнал на входе INTR не распознается и прерывание не происх. При I=1 и налич сигнала ШТЕК возник маскируемое прерывание. Действие кот. будет при этом выполн.: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)Прерванная программа продолж. свое выполнение.
Внутренне прерывание возникает либо при появлении некоторых микро сигналов внутри микропроцессора либо по команде внутри программы
11. Подпрограммы. Передача параметров. Ближние и дальние процедуры.
Подпрограммы на asm выз-ется командой call при этом выполн. сл. действия: -1-в стеке сохр. адрес сл. после call команды (для мал. моделей только регистр IP, большие – CS:IP).-2-В регистр CS:IP для больших моделей или IP загр. адрес точки входа в подпр.-3- посл. командой подпрогр. должна быть команда ret она загр. из стека адрес сл. после call команды. my_proc PROC – имя процедуры---my_proc ENDP. Для передачи параметров исп. 2 способа: - через регистр; - через стек; Также можно передавать копию аргумента или адрес аргумента. Команда CALL имеет 4 модификации: - вызов прямой ближний(в пределах текущего программного сегмента – near ptr):call near ptr proc1;- вызов косвенный ближний(word ptr): mov bx,offset proc1---call [bx];- прямой дальний вызов(вызов процедуры, расположенной в другом сегменте кода – far ptr): call far ptr proc1; - вызов косвенный дальний(dword ptr): adr dd proc1---call DS:adr(или call dword ptr adr).
.model small
.stack 100h
.code
start:
mov ax,12h
mov bx,2
call my_convert
mov ch,4ch
int 21h
my_convert PROC
push cx
……….
pop dx
pop cx
ret
my_convert endp
end start
12. Повторяющиеся блоки и макросы.
Чтобы не запис. в программе часто повт. фрагмент, рекоменд. хранить ее в именованном МАКРОСЕ и потом исп. его имя всякий раз, когда этот код потр. Макроопределение – это группа команд, которая должна вставляться в текст вместо макрокоманды. Макрокоманда – задает имя макроопределения, которое определяет, какую группу команд, в какое место программы необх. поместить и какие аргументы должны исп-ся вместо параметров. Макрорасширение –группа команд, реал. макроопределение, в котором парам. заменены на адреса конкр. переменных. Макроопр. имеет сл. вид: <имя макроса> MACRO <формальные параметры через запятую>---<тело макроса>---ENDM. Макрокоманда запис сл. обр. <имя макро>/<параметр>,…/. При написании макроопределений необходимо, чтобы метки в программе были уникальными. Для этой цели в языке имеется директива – local. LOCAL d1,d2,…; формальные параметры. Директива LOCAL позволяет объявить метку локальной и сгенерировать для нее уникальное имя вида: ??0000, ??0001 и т.д.
Swap MACRO w1,w2
push [word w1]
push [word w2]
pop [word w1]
pop [word w2]
ENDM
.data
val1 dw 15
val2 dw -7
. code
……….
swap val1, val2