
- •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. Операции с файлами: чтение и запись данных.
13. Вывод информации на экран. Видеорежимы. Видеопамять
Вывод на экран
В текстовом режиме:
1. Функция DOS int 21h
2. Функция BIOS int 10h
3. Прямой доступ к видео памяти
Всё что выводится на монитор находится в памяти. Для того что бы вывести данные на монитор они должны быть занесены в память В000:0000h -//- B800:FFFFh всё что находится в этой памяти немедленно пересылается на экран. Для отображения каждого символа используется 2 байта инфы. Младший байт хранит код символа, старший атрибуты. мет RGB мет RGB начало фон конец цвет символа.
Графический режим
Прерывание 10h также позволяет переключать графические режимы
Номера режимов:
11h 640x480 2 цветов
12h 640x480 16 цветов
13h 320x200 256 цветов
14. Строковые команды. Префиксы повторения.
Все команды для работы со строками считают, что строка-источник находится по адресу DS:SI (или DS:ESI), то есть в сегменте памяти, указанном в DS со смещением в SI, а строка-приемник — соответственно в ES:DI (или ES:EDI). Кроме того, все строковые команды работают только с одним элементом строки (байтом, словом или двойным словом) за один раз. Для того чтобы команда выполнялась над всей строкой, необходим один из префиксов повторения операций
• Префикс: REP
• Назначение: Повторять
префиксы для операций над строками. Любой из префиксов выполняет следующую за ним команду строковой обработки столько раз, сколько указано в регистре ЕСХ (или СХ, в зависимости от разрядности адреса), уменьшая его при каждом выполнении команды на 1. Кроме того, префиксы REPZ и REPE прекращают повторения команды, если флаг ZF сброшен в 0, и префиксы REPNZ и REPNE прекращают повторения, если флаг ZF установлен в 1. Префикс REP обычно используется с командами INS, OUTS, MOVS, LODS, STOS, а префиксы REPE, REPNE, REPZ и REPNZ — с командами CMPS и SCAS. Поведение префиксов не с командами строковой обработки не определено.
Все команды для работы со строками считают, что строка-источник находится по адресу DS:SI (или DS:ESI), то есть в сегменте памяти, указанном в DS со смещением в SI, а строка-приемник — соответственно в ES:DI (или ES:EDI). Кроме того, все строковые команды работают только с одним элементом строки (байтом, словом или двойным словом) за один раз. Для того чтобы команда выполнялась над всей строкой, необходим один из префиксов повторения операций
• Префикс: REP
• Назначение: Повторять
префиксы для операций над строками. Любой из префиксов выполняет следующую за ним команду строковой обработки столько раз, сколько указано в регистре ЕСХ (или СХ, в зависимости от разрядности адреса), уменьшая его при каждом выполнении команды на 1. Кроме того, префиксы REPZ и REPE прекращают повторения команды, если флаг ZF сброшен в 0, и префиксы REPNZ и REPNE прекращают повторения, если флаг ZF установлен в 1. Префикс REP обычно используется с командами INS, OUTS, MOVS, LODS, STOS, а префиксы REPE, REPNE, REPZ и REPNZ — с командами CMPS и SCAS. Поведение префиксов не с командами строковой обработки не определено
15. Организация циклов, условных и безусловных переходов
Безусл. переходы в асм. осущ. с помощью команды jmp mylabel; mylabel - метка куда перейдет. jmp - исп-ет 16 битное смещение элементов если задать. mov bx,wl;---jmp bx- преходпо содержимому регистра bx. jmp [wl] - аналогично. jmp можно использовать для перехода в другой сегмент но нужно делать перегрузку cs:ip. Сущ сл. переходы:1)типа short (короткий переход) — если адрес перехода находится в пределах от -127 до +128 байт от команды JMP; 2) типа near (ближний переход) — если адрес перехода находится в том же сегменте памяти, что и команда JMP; 3)типа far (дальний переход) — если адрес перехода находится в другом сегменте. Дальний переход может выполняться и в тот же самый сегмент, если в сегментной части операнда указано число, совпадающее с текущим значением CS; 4)переход с переключением задачи — передача управления другой задаче в многозадачной среде.
Условные переходы осущ. переход по заданному адресу в случае выполнения условия, задаваемого состоянием флагов процессора.
Код команды Реальное условие Условие для CMP
JA CF = 0 и ZF = 0 если выше
JNBE если не ниже или равно
JAE если выше или равно
JNB CF = 0 если не ниже
JNC если нет переноса
JB если ниже
JNAE CF = 1 если не выше или равно
JC если перенос
JBE CF = 1 и ZF = 1 если ниже или равно
JNA если не выше
JE ZF = 1 если равно
JZ если ноль
JG ZF = 0 и SF = OF если больше
JNLE если не меньше или рав
JGE SF = OF если больше или равно
JNL если не меньше
JL SF <> OF если меньше
JNGE если не больше или равн
JLE ZF = 1 и SF <> OF если меньше или равно
JNG если не больше
JNE ZF = 0 если не равно
JNZ если не ноль
JNO OF = 0 если нет переполнения
JO OF = 1 если есть переполнение
JNP PF = 0 если нет четности
JPO если нечетное