- •Содержание
- •Преобразование чисел
- •Целые числа
- •Дробные числа
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №2
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Объединение со структурой с битовыми полями в языке Си.
- •Лабораторная работа №3
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №4
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №5
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №6
- •Программирование на ассемблере
- •Основные команды ассемблера
- •Директивы
- •Программные прерывания
- •Отладка программ
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Лабораторная работа №7
- •Команда jmp
- •Команда Loop
- •Флаговый регистр (flags)
- •Команды условного перехода
- •Знаковые и беззнаковые данные
- •Команды логических операций: and, or, xor, test, not
- •Команды сдвига и циклического сдвига
- •Команды сдвига
- •Команды циклического сдвига
- •Содержание отчета
- •Контрольные вопросы
- •Задание на занятие
- •Литература
Программирование на ассемблере
Существует два режимаработы ассемблера:masmиIDEAL. Назначение режимаmasm– обеспечить полную совместимость с трансляторомMASMфирмыMicrosoft. Назначение режимаIDEAL– упростить синтаксис конструкций языка, повысить эффективность и скорость работы транслятора и создаваемых программ.
Формат команд языка ассемблера следующий:
[метка] команда [операнд(ы)]
Метка (если имеется), команда и операнд (если имеется) разделяются, по крайней мере, одним пробелом или символом табуляции. Важной особенностью команд является то, что они не могут оперировать одновременно с двумя операндами, находящимися в оперативной памяти.
Примеры команд:
|
Метка |
Команда |
Операнды |
Комментарии |
|
count |
db |
1 |
|
|
|
mov |
ax,4C00h |
;команда с двумя операндами |
|
m1: |
inc |
cx |
;команда с одним операндом |
|
|
cli |
|
;команда без операндов |
Комментарии начинаются в любой строке программы с символа ";", и считается, что все символы, находящиеся справа от символа ";" являются комментарием.
Основные команды ассемблера
В языке ассемблера существует около сотни команд. Но для того, чтобы начать изучать программирование на этом языке достаточно и одного десятка. На этом лабораторном занятии мы познакомимся только с тремя командами ассемблера.
Команда movпересылает байт или слово из источника в переменную или регистр назначения.
Формат команды: mov<назначение>, <источник>
Например, команда mov ax, 1003hозначает пересылку слова 0x1003 в регистрax.
Команда xorвыполняет операцию логического исключающего ИЛИ над переменной или регистром "назначения" с помощью операнда "источник".
Формат команды: xor<назначение>, <источник>
Например, команда ассемблера xori, 3 является аналогом оператора языка Сиi=i^3.
Команда intвызывает прерывание (сервисную процедуруDOSилиBIOS).
Формат команды: int<номер прерывания>
Например, команда int10hвызывает сервисную процедуруBIOSномер 0x10.
Директивы
Ассемблер имеет ряд операторов, которые позволяют управлять процессом ассемблирования. Эти операторы называются директивами. Они действуют только в процессе ассемблирования программы и не генерируют машинных кодов. Рассмотрим основные директивы.
Директивы резервирования и инициализации данных:
|
Имя |
Длина |
Применение |
|
db |
1 байт |
|
|
dw |
2 байта |
|
|
dd |
4 байта |
|
Директивы определения сегмента:
|
Формат директивы |
Назначение |
|
.CODE [имя] |
Начало сегмента кода |
|
.DATA |
Начало сегмента инициализированных данных. |
|
.CONST |
Начало сегмента постоянных данных (констант) модуля |
|
.STACK [размер] |
Начало сегмента стека модуля. Параметр [размер] задает размер стека |
Директива modelопределяет модель памяти. Самые распространённые виды моделей памяти – этоsmallиtiny. Первый наиболее часто используется для обычных программ, второй – для программ формата .com.
При использовании директивы modelтранслятор делает доступными несколько идентификаторов (предопределенных имен), к которым можно обращаться во время работы программы, с тем, чтобы получить информацию о тех или иных характеристиках данной модели памяти. Перечислим основные идентификаторы и их значения:
|
Имя идентификатора |
Назначение |
|
@code |
адрес сегмента кода |
|
@data |
адрес сегмента данных |
|
@stack |
адрес сегмента стека |
