- •5. Преобразование двоичных чисел в десятичные
- •Преобразование десятичных чисел в двоичные
- •1H ;Перенос от предыдущей операции.
- •10. Общая структура программы на языке Ассемблер. Сегмент кода. Сегмент данных.
- •11. Подготовка, компиляция, компоновка ассемблерных программ
- •12. Отладка ассемблерных программ. Выполнение ассемблерных программ.
- •13. Формат директив и машинных команд. Директивы инициализации данных. Директивы описания данных на языке Ассемблера.
- •14. Простейшие директивы сегментации. Модели памяти. Сегменты данных.
- •15. Стандартные директивы сегментации. Команды пересылки данных.
- •16. Организация стека. Команды работы со стеком.
- •17. Команды двоичной арифметики (сложение, вычитание). Влияние на регистр флагов
- •18. Команды двоичной арифметики (умножение, деление). Влияние на регистр флагов.
- •19. Логические операции
- •23. Команды передачи управления. Команды условной передачи управления для операндов без знака. Дальность адресации.
- •24. Команды передачи управления. Команды условного перехода и флаги.
- •25.Организация цикла
- •29.Обработка массивов
- •30.Вызов подпрограмм
- •32. Повторяющиеся блоки и макросы
- •35.Обработка прерываний в реальном режиме.
- •36.Ввод информации с клавиатуры
- •1. Средства dos
- •2. Средства bios
- •37. Использование функций Int 21h (01h, 06h, 07h) для ввода информации.
- •Использование функций Int 21h (08h, 0Ah, 0Bh) для ввода информации.
- •Использование функций Int 21h (0Ch, 3Fh) для ввода информации.
- •Использование функций Int 16h bios для ввода информации
- •Использование функций Int 21h (02h, 06h, 09h) для вывода информации на экран.
- •Использование функций Int 21h для ввода, вывода информации в файл.
- •Использование функций Int 10h bios (00h,4Fh,02h).
- •Использование функций Int 10h bios (03h,08h,09h).
- •Использование функций Int 10h bios (0Ah,0Eh,13h).
- •Вывод графической информации на экран. Видеорежимы.
- •47. Ассемблер и языки высокого уровня. Вызов процедур.
- •48. Создание встраиваемого ассемблерного кода. Ассемблер, встроенный в программу на языке Pascal.
- •49. Создание встраиваемого ассемблерного кода. Ассемблер, встроенный в программу на языке с.
- •50. Охарактеризуйте системные средства управления памятью. Опишите структуру и образ памяти программ .Exe и .Com.
- •51. Трансляторы и интерпретаторы - общая схема работы.
- •Формат командных операторов
- •Формат директив ассемблера и операторов распределения данных
- •Имя Директива Операнды ;Комментарий
- •Элементы операторов
- •Регистры
- •Переменные
- •Числовые константы
- •Символьные константы
- •Сегменты и процедуры
- •Segment (начало сегмента) и ends (конец сегмента).
- •Система команд микропроцессора 8086
- •Команды передачи данных
- •Общие команды передачи данных
- •Команда mov
- •Команда обмена xchg
- •Команда xlat
- •Команды lea, lds и les
- •Команды lahf и sahf
- •Стековые команды
- •Команды ввода-вывода
- •In ac,port out port,ac (прямая укороченная адресация)
- •In ac,dx out dx,ac (косвенная адресация) команды арифметических операций
- •Команды сложения Команда add
- •Команда imul
- •Команды деления
- •Команда div
- •Команда idiv
- •Команды преобразования
- •Команды десятичной арифметики
- •Команды для формата bcd
- •Команды для формата ascii
- •Команды логических операций и команды сдвигов команды логических операций
- •Команды сдвигов
- •Команды передачи управления
- •Команды безусловных переходов
- •Команды условных переходов
- •Команды вызова подпрограмм
- •Команды возврата из подпрограмм
- •Команды управления циклами
- •Команды прерываний
- •Int type - вызов прерывания с номером type (от 0 до 255),
- •Цепочечные команды
- •Префикс повторения
- •Команда movs
- •Команда cmps
- •Команда scas
- •Команда lods
- •Команда stos
Формат директив ассемблера и операторов распределения данных
Директивы ассемблера и операторы распределения данных имеют несколько иной формат:
Имя Директива Операнды ;Комментарий
Рассмотрим назначение отдельных полей данного формата:
Имя директивы, в отличие от метки, никогда не заканчивается двоеточием. Некоторые директивы требуют обязательного наличия метки.
Директива является одним из ключевых неизменяемых слов ассемблера и определяет его действия в процессе ассемблирования. Директивы используются программистом для распределения памяти, обеспечения связи между программными модулями и работы с символическими именами.
Операнды конкретизируют действия, выполняемые по данной директиве.
Поле комментария аналогично такому же полю в командных операторах.
Элементы операторов
Дадим определения основных терминов, которые будут использованы в дальнейшем.
Ключевые (зарезервированные) слова представляют собой имена, имеющие для ассемблера строго определенный смысл. Их нельзя использовать в качестве идентификаторов.
Идентификатор как общий термин для меток и имен переменных - это определяемая программистом последовательность символов. Первым символом в последовательности должна быть буква или один из символов @, подчеркивание или знак вопроса. В качестве последующих символов можно также использовать цифры. Максимальная длина идентификатора 31 символ.
Ассемблер процессора 8086 является жестко типизированным языком. Это означает, что операнды команд (регистры, переменные, метки, константы) имеют связанный с ними атрибут типа, который сообщает ассемблеру некоторую информацию об операнде. Атрибут типа обычно подразумевается по умолчанию, но при необходимости может быть задан явно.
Регистры
8-разрядным регистрам AL, AH, BL, BH, CL, CH, DL, DH приписан тип BYTE, а 16-разрядным регистрам AX, BX, CX, DX, BP, SP, SI, DI и сегментным регистрам CS, DS, SS, ES приписан тип WORD.
Разряды регистра флажков представляют собой однобитные регистры, для установки и сброса каждого из которых используются отдельные машинные команды.
Переменные
При программировании может возникнуть необходимость многократного обращения к данным. Вместо того, чтобы оперировать громоздкими численными значениями адресов, удобно определять и применять символические имена, соответствующие адресам указанных элементов.
Переменная - это единица программных данных, имеющая символическое имя.
Большинство ассемблерных программ начинается с определения данных, которыми они будут оперировать. Распределение ячеек памяти и присвоение им идентификаторов осуществляется с помощью директив DB (Define Byte - определить байт), DW (Define Word - определить слово), DD (Define Doubleword - определить двойное слово), DQ (Define Quadword - определить 4 слова) или DT (Define Tenbyte - определить 10 байтов).
Операторы распределения данных имеют следующий формат:
Имя DB нач.значение, нач.значение, ...
Имя DW нач.значение, нач.значение, ...
Имя DD нач.значение, нач.значение, ...
Имя DQ нач.значение, нач.значение, ...
Имя DT нач.значение, нач.значение, ...
Таким образом, каждая директива может инициировать одну или несколько переменных соответствующего типа.
Для задания начальных значений могут использоваться числовые константы и символьные цепочки. Если не нужно задавать начальное значение переменной, то вместо константы ставится вопросительный знак.
Например, оператор
alpha DW 0Ah
резервирует слово памяти, присваивает ему идентификатор alpha и заносит в него код 000A;
string DB 'Привет'
резервирует 6 байт памяти и заносит в них строку символов и присваивает этой строке идентификатор string.
Чтобы точно определить тип переменной, на которую производится ссылка, ассемблер использует операторы BYTE PTR, WORD PTR и DWORD PTR (указатель на байт, слово и двойное слово соответственно).
Для инициализации массивов применяется конструкция DUP, которая в общем случае имеет вид:
n DUP (нач. значение, нач. значение, ...)
где параметр n задает число повторений элементов, находящихся в круглых скобках.
Например, оператор
Addr DD 20 DUP (?)
резервирует место для 20 полных адресов и присваивает этому массиву идентификатор Addr.
МЕТКИ
Метка представляет собой символическое имя для адреса ячейки памяти и предназначена для использования в качестве операнда в командах управления.