- •!Производительность вс
- •Методы и средства повышения надежности эвм
- •Регистр флагов
- •Способы адресации
- •Команды пересылки данных, синтаксис команд.
- •Команды двоичной арифметики, синтаксис команд.
- •Команды логических операций, синтаксис команд.
- •Общий вид строк программ на языке ассемблера.
- •Метка: назначение, синтаксис, правила именования, директива метки, вызов метки
- •Псевдокоманды
- •Организация сегментов: сегменты и их значения, порядок следования и синтаксис
- •Оператор, операнд. Операторы адресации
- •Другие операторы(дополнительные) и их описание
- •Макроопределение
- •Прерывание dos
- •Символьный ввод/вывод, функции.
- •Прерывание и функции работы с мышью
- •Прерывание и функции системного таймера
- •Команды передачи управления
- •Команды безусловного перехода: синтаксис и область использования
- •Команды условного перехода: мнемоника и таблица условных переходов, операнд команд
- •Комментарии в программе
- •Модульное программирование
- •Концепция модульного программирования
- •Модуль, спецификация модуля
- •Разновидность модулей
- •Характеристики модуля:
- •Машинный код, языки программирования низкого уровня, язык ассемблера, ассемблер
- •Debug: ассемблирование и дизассемблирование
- •Строка в ассемблере, исполняемый файл. Трансляция программ
- •Программы ассемблера для компьютеров с процессором Intel.Типы программ на языке ассемблера
- •Средства dos вывода на экран в текстовом режиме
- •Способы моделирования (определения) в массиве
- •Клавиатурные функции dos и bios
- •Двухмерные массивы, вычисления адреса элемента
- •Машинная команда, части машиной команды
- •Директивы процессора (препроцессора)
- •Идентификаторы объектов программы, правила записи идентификаторов
- •Структура программы на языке ассемблера и ее описание
- •Организация цикла с помощью loop
- •Инкремент и декремент
- •Раздельная трансляция: назначение, варианты компоновки
- •!Высказывания, виды высказываний. Логические переменные и функции
- •Логические операции. Таблицы истинности логических операций
- •Заголовок модуля. Имена и идентификаторы в модуле
- •Структуры (тип данных) и объединения
Символьный ввод/вывод, функции.
Int 21h AH=01h– ввод с клавиатуры с эхо-выводом
06h - ввод без эхо-вывода
05h – вывод на принтер
02h – прокрутка вверх-вниз
09h – отобразить страницу которая заканчивается «$»
Прерывание и функции работы с мышью
Все общение с мышью в DOS выполняется через прерывание 33h.
INT 33h, AX = 0— Инициализация мыши
AX = 1— Показать курсор
AX = 2— Спрятать курсор
AX = 3 — Определить состояние мыши
ВХ = :
0 — нажата левая кнопка
1 — нажата правая кнопка
2 — нажата средняя кнопка
СХ = Х-координата
DX = Y-координата
AX = 0Ch— Установить обработчик событий
ES:DX = адрес обработчика СХ = условие вызова
0 — любое перемещение мыши
1 — нажатие левой кнопки
2 — отпускание левой кнопки
3 — нажатие правой кнопки
4 — отпускание правой кнопки
5 — нажатие средней кнопки
6 — отпускание средней кнопки
СХ = 0000h — отменить обработчик
Прерывание и функции системного таймера
Int 21h AX = 2Ah - Определить дату
СХ = год
DH = месяц
DL = день
AL = день недели (0 — воскресенье, 1 — понедельник...)
AX = 2Ch
СН = час
CL = минута
DH = секунда
DL = сотая доля секунды
2Bh— Установить дату
2Dh— Установить время
Команды передачи управления
Команды безусловного перехода: синтаксис и область использования
Команды машинной программы выполняются в том порядке, как они записаны в памяти. Но время от времени этот естественный порядок выполнения команд приходится нарушать с тем, чтобы следующей выполнялась не очередная команда программы, а какая-то иная. Такую возможность обеспечивают команды перехода.
Если переход делается только тогда, когда выполнено некоторое условие, то такой переход называется условным, а если он делается независимо от каких-либо условий, то это безусловный переход.
Формат команды: JMP имя
Имя (метка) может иметь атрибут NEAR (близкая, т.е. в пределах одного и того же сегмента кода) или FAR (дальняя, т.е. такая, на которую можно переходить из других сегментов кода),short (короткий, Исп-ся, если адрес перехода находится в пределах со значением -128 to +127 от к-ды).
Команды условного перехода: мнемоника и таблица условных переходов, операнд команд
Команды перехода начинаются с j и работают в связке с cmp.
Пример:
Cmp eax, 42h
Jz metka2
Если регистр eax равен 42, то управление передастся первой команде после метки metka2.
код |
Значение(переход,если...) |
Условие |
JA |
(X > Y) |
CF=0 & ZF=0 |
JAE |
(X >= Y) |
CF=0 |
JB |
(X<Y) |
CF=1 |
JBE |
(X <= Y) |
CF=1 or ZF=1 |
JC |
Если оба сущ. |
CF=1 |
JCXZ |
Jump if CX=0 |
регистр CX=0 |
JE (то же, что и JZ) |
(X = Y) |
ZF=1 |
JG |
(X > Y) с учетом знака |
ZF=0 SF=OF |
JL |
(X <Y) с учетом знака |
SF != OF |
JMP |
прыгает всегда |
- |
JNA |
X не больше Y (для чисел без знака) |
CF=1 or ZF=1 |
JNAE |
X не больше или равно Y (для чисел без знака) |
CF=1 |
JNC |
Если нету |
CF=0 |
JP |
Если четное |
PF=1 |
JPO |
Если нечетное |
PF=0 |
Все команды перехода имеют один операнд: смещение для перехода
Организация циклов в ассемблере
Циклом называется любая многократно исполняемая последовательность инструкций
Этапы циклов:
1)Выборка команды
2)Формирование адреса следующей команды
3)Декодирование
4)Вычисление адресов операндов
5)Выборка операндов из ОП
6)Исполнение операции
7)Запись результатов в память
Передача параметров и процедур
Переменные и константы в программах
Правила написания программ на языке ассемблера
1.Порядок
а) Инструкции для пользователя
б) К созданному описанию добавьте вслед за каждым абзацем блоки кода, реализующие функции, описанные в этом абзаце.
Работа программиста состоит из двух частей: разработать приложение и сделать возможным дальнейшее сопровождение программы.
2. Подходы при написании комментариев:
перед каждой функцией или методом размещается одно или два предложения со следующей информацией:
что делает программа;
возникающие предположения о программе;
содержание входных параметров;
содержание выходном параметров в случае успешного или неудачного завершения;
все возможные выходные значения;
перед каждой не очевидной частью функции поместить объяснение действия;
любой алгоритм нужно подробно описать;
любая нетривиальная ошибка, устраненная в коде, должна комментироваться;
правильно размещенные операторы диагностики, проверки условий, а также соглашения об именах переменных являются комментариями сами по себе;
писать комментарии так, будто сами собираетесь заниматься его поддержкой через пять лет;
если возникла мысль «это хитро сделано» нужно переписать данную функцию;
3. Читайте код
4. Разлагайте сложные проблемы на задачи меньшего размера
5. Используйте язык ассемблера полностью
6. Проблема должна быть хорошо продумана перед тем, как она сможет быть решена
7. Программа должна писаться не менее двух раз
8. Оптимизация программ на языке ассемблера
Подбор оптимального алгоритма
Подстройка программы под конкретное оборудование;
Замена ассемблерных команд на машинный код.
Стиль программирования - архитектура исходного кода, внешнее оформление, но и использование констант, разбиения кода на функции или процедуры, способы вызова функций и процедур, согласованность структур, их потенциал к расширению, гибкость алгоритмов и т.д.
9. Повышение читаемости, удобства и красоты программы.
После каждой строки, где меняется значение регистра, указывать в комментарии, что в этом регистре
Отступы делать не просто для циклов и ветвлений, но и для выделения любых ресурсов.
Подряд ищущих строк должно быть не более пяти-семи. Для таких блоков часто можно сделать резюмирующий комментарий.
В отдельные функции выделять логически связанные куски кода.
Давать осмысленные имена всему. Никогда не использовать числовые константы и безымянные метки
Структуризация проекта. Проект нужно делить на функции, модули (файлы), пакеты (папки) и подсистемы.
инкапсуляция
не использовать прописные буквы с мнемониками инструкций и именами регистров.
