
- •1. Внутренние регистры
- •1.1. Регистры данных
- •1.2. Регистры сегментов
- •1.3. Регистры указателей и индексов
- •1.4. Регистр командного указателя
- •1.5. Флаговый регистр
- •2. Структура и процесс разработки программы на языке ассемблера
- •2.1. Команды
- •2.2. Псевдооператоры
- •2.2.1. Псевдооператор segment
- •2.2.2. Псевдооператор proc
- •2.2.3. Псевдооператор assume
- •2.2.4. Псевдооператор end
- •2.2.5. Псевдооператоры определения данных
- •2.3. Инициализация программы
- •3. Команды пересылки данных
- •3.1. Команда mov
- •3.2. Команды push и рор
- •4. Режимы адресации
- •4.1. Регистровая и непосредственная адресация
- •4.2. Исполнительный адрес
- •4.3. Прямая адресация
- •4.4. Косвенная регистровая адресация
- •4.5. Адресация по базе
- •4.6. Прямая адресация с индексированием
- •4.7. Адресация по базе с индексированием
- •5. Команды передачи управления
- •5.1. Команды call и ret
- •5.2. Команда безусловного перехода jmp
- •5.3. Команды условной передачи управления
- •5.4. Команды управления циклами
- •6. Команды обработки строк
- •6.1. Команды пересылки строк movs, movsb, movsw
- •6.2. Префиксы повторения
- •6.3. Команды сравнения строк. Команда cmps.
- •6.4. Команды сканирования строк
- •6.5. Команды загрузки и сохранения строки
- •7. Взаимодействие языков Си и Ассемблера
- •7.1. Внутренняя структура программы на языке Си для ibm pc
- •7.2. Использование функций на языке Ассемблера
- •7.2.1. Основы взаимодействия языков Си и Ассемблера
- •7.2.2. Передача управления в подпрограмму и обратно
- •7.2.3. Использование глобальных данных
- •7.2.4. Использование аргументов функции
- •7.2.5. Возвращение значения через имя подпрограммы
- •7.2.6. Использование аргументов
- •7.3. Вызов функций на языке Си из программ на языке Ассемблера
- •7.4. Использование локальных данных
- •8. Арифметические команды
- •8.1. Форматы хранения десятичных чисел
- •8.2. Команды сложения
- •8.3. Коррекция результата сложения для bcd-форматов
- •8.4. Команда приращения значения приемника на единицу
- •8.5. Команды вычитания
- •8.6. Коррекция результата вычитания для bcd-форматов
- •8.7. Команда уменьшения содержимого приемника на единицу
- •8.8. Команда обращения знака
- •8.9. Команды умножения
- •8.10. Коррекция результатов умножения
- •8.11. Команды деления
- •8.12. Коррекция результатов деления
- •8.13. Команды расширения знака
- •9. Команды манипулирования битами
- •9.1. Логические команды and, or и xor
- •9.2. Команда логического отрицания nот
- •9.3. Команда проверки test
- •9.4. Команды сдвига и циклического сдвига
- •9.4.1. Команды сдвига
- •9.4.2. Команды циклического сдвига
- •10. Команды работы с флагами
- •10.1. Команды управления флагами
- •10.2. Команды пересылки флагов
- •11. Псевдооператоры определения идентификаторов и операции
- •11.1. Псевдооператоры определения идентификаторов
- •11.2. Операции
- •11.2.1. Арифметические операции
- •11.2.2. Логические операции
- •11.2.3. Операции отношения
- •11.2.4. Операции, возвращающие значения
- •11.2.5. Операции присваивания атрибутов
- •12. Условные псевдооператоры
- •13. Макроопределения
- •13.1. Сравнение макроопределений и процедур
- •13.2. Состав макроопределений
- •13.3. Псевдооператоры макроассемблера
- •13.3.1. Псевдооператор local
- •13.3.2. Псевдооператоры повторения
- •13.3.3. Условные псевдооператоры
- •13.3.4. Псевдооператор eхiтм
- •13.4. Операции в макроопределениях
- •13.5. Задание макроопределений в исходных программах
- •13.5.1. Использование библиотеки макроопределений
- •13.5.2. Указания для задания макроопределений
- •13.5.3. Считывание библиотеки макроопределений в программу
- •13.5.4. Удаление макроопределений
1.3. Регистры указателей и индексов
Доступ к данным осуществляется за счет выбора номера блока из соответствующего регистра сегмента, а смещения – из другого регистра.
Регистры указателей:
SP – указатель стека
ВР – указатель базы
обеспечивают системе доступ к данным в сегменте стека. Номер блока извлекается из регистра SS, а смещение – из регистров SP или ВР. Реже они используются для операций сложения и вычитания.
Индексные регистры:
Оба индексных регистра могут применяться для расширенной адресации и для использования в операциях сложения и вычитания.
SI – индекс источника
при использовании для операций над строками связан с регистром DS,
DI –индекс приемника
при использовании для операций над строками связан с регистром ES.
1.4. Регистр командного указателя
Регистр IP содержит смещение на команду, которая должна быть выполнена.
Для вычисления адреса следующей исполняемой команды микропроцессор 8088 извлекает номер блока памяти из регистра CS, а смещение – из регистра IP.
1.5. Флаговый регистр
Во флаговом регистре являются активными 9 из 16 бит. Биты регистра определяют текущее состояние машины и результаты выполнения команд. Многие арифметические команды и команды сравнения изменяют состояние флагов. Рассмотрим назначение флаговых битов:
OF – переполнение – указывает на переполнение старшего бита при арифметических командах;
DF – направление – обозначает левое или правое направление при работе со строками;
IF – прерывание – разрешает микропроцессору реагировать на прерывания от внешних устройств;
ТF – пошаговый режим – обеспечивает возможность работы процессора в пошаговом режиме и используется при отладке программ;
SF – знак – содержит результирующий знак после арифметических
операций над числами со знаком (0 – плюс, 1 – минус).
ZF – ноль – показывает результат арифметических операций и операций сравнения (0 – ненулевой, 1 – нулевой результат).
АF – внешний перенос – содержит перенос из 3-го бита для 8-битовых данных, используется для специальных арифметических операций.
РF – контроль четности – показывает четность младших 8-битовых данных (1 – четное и 0 – нечетное число).
СF – перенос – содержит перенос из старшего бита после арифметических операций, а также последний бит при сдвигах или циклических сдвигах.
2. Структура и процесс разработки программы на языке ассемблера
Язык ассемблера имеет два достоинства: с одной стороны, он позволяет писать программы на уровне команд микропроцессора, а с другой стороны, не требует запоминания числовых кодов команд, которыми оперирует процессор. Язык ассемблера оперирует символическими мнемокодами вместо машинных команд и описательными именами для полей данных и адресов памяти.
Процесс подготовки ассемблерной программы к выполнению состоит из трех этапов.
Сначала записывается исходная программа, содержащая ассемблерной команды.
Затем исходная программа транслируется в машинный код, называемый объектной программой.
И наконец, программа компоновщик или загрузчик генерирует загрузочный модуль на основе одной или нескольких объектных программ.
Программа на языке ассемблера представляет собой последовательность операторов, описывающих выполняемые действия. Оператором исходной программы может быть или команда, или псевдооператор языка ассемблера.
Команды языка ассемблера представляют собой краткую нотацию системы команд микропроцессора 8088.
Псевдооператоры сообщают программе, производящей ассемблирование (Ассемблеру), что ей делать с вводимыми командами и данными.
Операторы любого вида могут включать в себя операции, которые дают Ассемблеру информацию об операндах, относительно которых нет полной определенности. Существует несколько видов операций, например, арифметические, логические.