- •Понятие алгоритма: рекурсивные функции, системы текстовых замен.
- •Системы счисления, переводы чисел из одной позиционной системы в другую.
- •Передача параметров в подпрограмму, параметры входные и выходные, параметры, передаваемые по значению и по адресу.
- •Использование подпрограмм, параметры формальные, локальные, глобальные, обращения к подпрограммам, фактические параметры.
- •Статические и динамические переменные, динамическая память, работа с динамическими переменными.
- •Понятие линейного связного списка, типы списков, представление стека с помощью массива, пример использования стека.
- •Использование динамических переменных для представления и работы со стеком.
- •Очередь, реализация очереди массивом.
- •Очередь, представление и реализация основных операций с помощью динамических переменных.
- •Реализация основных операций со списком: добавление, удаление, поиск.
- •Деревья, основные операции над деревьями, представление дерева массивом.
- •Двусвязные линейные списки, построение и обход бинарного дерева.
- •Операции поиска и удаления в бинарном дереве.
- •Понятие графа, представление графа на эвм.
- •Представление графа списком инцидентности, алгоритм обхода графа в глубину.
- •Представление графа списком списков, алгоритм обхода графа в ширину.
- •Технологии программирования, концепции, заложенные в ооп.
- •Основные понятия ооп: абстракция, инкапсуляция, полиморфизм.
- •Понятие объекта, его состояние и поведение, классы, определение класса и объявление класса.
- •Статические, дружественные и виртуальные поля и методы, особенности их использования.
- •Абстрактные классы, их назначение и использование.
- •Понятие области видимости: общие, личные, защищённые и опубликованные поля и методы объекта.
- •Указатель this и перегрузка методов.
- •Использование классов, различные способы инициализации.
- •Использование классов, работа с массивами и указателями на обьекты.
- •Наследование, пример использования наследования.
- •Конструкторы и деструкторы, их назначение и использование.
- •Архитектура пк, основные функциональные устройства и их назначение.
- •Мп с точки зрения программиста, регистры общего назначения.
- •Оперативная память, понятие исполняемого и физического адреса, сегментные регистры.
- •Регистр флажков, его назначение и использование.
- •Форматы данных и форматы команд, машинный формат двухадресной машины.
- •Адресация операндов, способы адресации, примеры команд с различными способами адресации.
- •Понятие команды и директивы в Ассемблере, формат команды и директивы.
- •Структура программы на Ассемблере с использованием стандартных директив сегментации.
- •Основные элементы языка Ассемблер: имена, константы, переменные, выражения.
- •Директивы определения данных и памяти, примеры.
- •Команда прерывания, команды работы со стеком.
- •Упрощённые директивы сегментирования, структура программы с использованием точечных директив, пример программы.
- •Этапы выполнения Ассемблерной программы на эвм, понятие com-файла.
- •Различие между exe - и com – файлами, требования, предъявляемые к исходному модулю, предназначенному для создания com – файла, примеры программ.
- •Понятие структурного программирования, этап проектирования – композиция и декомпозиция, понятие статической и динамической структуры программы, спецификация программы.
- •Понятие частичной и полной корректности программы, правила вывода – общий вид, правила консеквенции.
- •Правила вывода для операторов: пустого, присваивания, составного.
- •Правила вывода для операторов ветвления.
- •Правила вывода циклов с предусловием и посусловием.
Команда прерывания, команды работы со стеком.
int (int - от interrupt - прерывание) - с помощью команды прерывания происходит приостановка работы процессора - управление передается DOS или BIOS в зависимости от операнда этой команды и содержимого некоторых регистров, строго определенных для каждой функции. После выполнения обрабатывающей программы управление передается команде, следующей за int.
Пример:(вывод символа '!')
MOV AH,6 ; в регистр AH пересылается номер функции(в данном случае 6 )
MOV DL, '!'; в регистр DL пересылается нужный символ
int 21h; обращение к обработчику функции операционной системы(вызов DOS)
Регистры стека - SS и SP(ESP)
SS - определяет адрес начала сегмента стека(этот адрес определяется системой самостоятельно)
SP - указатель на вершину стека, его значение уменьшается при добавлении элементов
PUSH <операнд> - положить на вершину стека. Операндом может служить переменная или регистр(тогда на вершину поступит значение регистра)
POP <операнд> - удалить вершину стека(операнды как в PUSH)
Можно обратиться к произвольному элементу стека, не удаляя предварительно все элементы "выше" нужного. Для этого нужно указатель на вершину стека записать в вспомогательный регистр.
MOV BP,SP; (SP)->BP (BP указывает на вершину стека)
MOV AX, [BP+6]; (SS:(BP+6))->AX(адресация по базе - мы берем элемент 6-й от вершины)
Пример - программа переписывает содержимое 4 байтов из одного участка памяти в другой(в обратном порядке) и выводит их на экран
TITLE Prim.ASM; директива определяет заголовок листинга программы (необязательная )
Page,120; определение страницы листинга:1)кол-во строк на странице( у нас отсутствует - значение возьмется по умолчанию - 58 строк) 2)кол-во символов строке - 120
;описание сегмента стека
Sseg Segment Para Stack 'stack'
DB 100h dup(?); выделили для стека 100h(в 16-й системе счисления) = 255 байтов с произвольным значением
Sseg ends;
описание сегмента данных
Dseg segment Para Public 'Data'
DAN DB '1','3','5','7'; DAN - для хранения данных - инициализировали 4-мя символами
REZ DB 4 dup(?); выделили 4 байта для REZ(результат)
Dseg ends
;кодовый сегмент - как одна внешняя процедура - к ней обращение происходит через ;отладчик
Cseg Segment Para Public 'Code'
ASSUME SS:Sseg, DS: Dseg, CS:Cseg
Start proc FAR
PUSH DS;
XOR AX,AX
PUSH AX; в стек отправится пустое слово
MOV AX, Dseg
MOV DS, AX;
пересылка данных в обратной последовательности с выводом на экран
MOV AH, 6; в AH отправили код команды для DOS
MOV DL, DAN; '1' записывается в DL
MOV REZ+3, DL; '1' в последний байт REZ
int 21h; прерывание
MOV DL, DAN+1; '3' записывается в DL
MOV REZ+2, DL; '3' в третий байт REZ
int 21h; прерывание
MOV DL, DAN +2; '5' в DL
MOV REZ+1, DL; '5' во второй байт REZ
int 21h; прерывание
MOV DL, DAN+3; '7' в DL
MOV REZ, DL; '7' отправляется в первый байт REZ
int 21h
MOV AH, 4Ch
int 21h
Start endp
Cseg ends
End start
Упрощённые директивы сегментирования, структура программы с использованием точечных директив, пример программы.
Упрощенные директивы сегментирования, структура программы с использованием точечных директив, пример программы.
С помощью стандартных директив сегментации можно писать программы любой сложности и размера. в ассемблере сегодня существует возможность повысить уровень программирования - для этого имеются упрощенные директивы сегментации, называемые точечными.
MODEL - директива определяет модель памяти, выделяемой под программу:
-tiny - под всю программу выделяется 1 сегмент памяти
-small - по 1-му сегменту на данные и на программу
-medium - под данные 1 сегмент, под программу несколько
-compact - под программу 1 сегмент, под данные несколько
-large - под данные и программу по несколько сегментов
-huge - позволяет использовать памяти больше, чем объем ОП(запись данных на диск)
Пример использования точечных директив
.MODEL small
.STACK 100h
.DATA
St1 DB 'Line 1','$'
St2 DB 'Line 2','$'
St3 DB 'Line 3','$'
.CODE
begin: MOV AH,9; begin: - метка, 9 - номер ф-и вывода на экран
MOV DX, offset St1; в DX должен содержаться адрес St1
int 21h
Mov DX, offset St2
int 21h
MOV DX,offset St3
int 21h
MOV AH,4Ch
int 21h
end begin
В результате получим: Line 1 Line 2 Line 3
Чтобы вывести в столбик необходимы следующие изменения:
St1 DB 'Line 1' ,13,10.'$'; 13- перевод строки, 10 - возврат каретки
St2 DB 'Line 2' ,0Dh,0Ah.'$';0Dh(в 16-й системе счисл) = 13, 0Ah = 10
St3 DB 'Line 3','$'