- •Магомедов и. А. Микропроцессорные системы. Аппаратные и программные средства.
- •Глава 1. Микропроцессоры
- •Глава II. Программирование микропроцессоров
- •Глава III. Лабораторный практикум по программированию мп i80х86
- •Глава 1. Микропроцессоры
- •1.1. Назначение микропроцессоров
- •1.2. Универсальные микропроцессоры
- •1.2.2. Микропроцессоры компании amd
- •1.2.3. Микропроцессоры компании Cyrix
- •1.2.4. Микропроцессоры с архитектурой Alpha
- •1.2.5. Микропроцессоры с архитектурой sparc
- •1.2.6. Микропроцессоры Hewlett-Packard ра-8000
- •1.3. Микропроцессоры обработки сигналов
- •1.3.1. Сигнальные микропроцессоры компании
- •1.3.2. Сигнальные микропроцессоры компании Motorola
- •1.3.3. Микропроцессоры семейства dsp 560хх
- •1.4. Медийные микропроцессоры
- •1.5. Транспьютероподобные микропроцессоры
- •1.6. Нейропроцессоры
- •Глава II. Программирование микропроцессоров
- •2.1. Программная модель 32-разрядных процессоров
- •2.1.2. Типы данных
- •2.1.3. Регистры процессора
- •2.2. Форматы команд
- •2.3. Выбор операнда
- •2.4. Режимы адресации
- •Вопросы для самоконтроля к главе 2
- •Глава III. Лабораторный практикум по программированию мп i86
- •Обобщенная структурная схема микропроцессора х86
- •Организация основной памяти и средства аппаратной поддержки управления памятью
- •Выполнение программы
- •Формат операторов ассемблера
- •Определение полей памяти для размещения данных.
- •3.2. Операнды команд ассемблера
- •Команда пересылки данных
- •Команда загрузки исполнительного адреса
- •Команды загрузки указателя.
- •Команда записи в стек
- •Команда обмен данными
- •Команды сложения/ Команды вычитания
- •Команда изменения знака
- •Команда добавления /вычитания единицы
- •Команда сравнения
- •Команды умножения/ деления
- •Команда преобразования байта в слово, а слова - в двойное слово.
- •Команды передачи управления
- •Команды условного перехода
- •Команды организации циклической обработки
- •Команда перехода по обнуленному счетчику
- •Команды организации цикла с условием
- •Команды вызова подпрограмм
- •Команда возврата управления
- •Команды обработки строк
- •Логические команды
- •2. Программирование циклических процессов.
- •3. Моделирование одномерных массивов
- •4. Моделирование матриц
- •5. Преобразования ввода-вывода.
- •3.4. Основные команды отладчика afd
- •Fspec определяет имя файла, наименованного в соответствии с соглашениями dos. Для команды l расширением по умолчанию является “exe”;
- •String задает список значений или ascii строк (строка заключена в кавычки) разделенных пробелами или запятой.
- •Например: 1234 bx, ‘tromb’ ff.
- •Лабораторная работа № 1 Создание выполнимого файла, работа в отладчике, изучение оператора пересылки mov
- •Оператор mov
- •Индивидуальные задания
- •Лабораторная работа № 2 Сегментация памяти, директивы ассемблера
- •Прямая адресация
- •Косвенная адресация
- •Директива assume
- •Индивидуальные задания
- •Лабораторная работа №.3 Директивы equ, label, команды сложения и вычитания Директива equ
- •Директива label
- •Команды сложения и вычитания
- •Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •Лабораторная работа № 4 Изучение операторов обмена xchg и xlat
- •Индивидуальные задания Вариант 1.
- •Вариант 2.
- •Вариант 3.
- •Вариант 4.
- •Вариант 5.
- •Вариант 6.
- •Вариант 7.
- •Вариант 8.
- •Вариант 9.
- •Вариант 10.
- •Вариант 11.
- •Вариант 12.
- •П1. Команды пересылки данных
- •Система команд процессораi486
- •П2. Арифметические команды
- •П3. Логические команды
- •П4. Команды переходов
- •П5. Команды процессора i486
Лабораторная работа №.3 Директивы equ, label, команды сложения и вычитания Директива equ
Эта директива определяет значение, которое можно использовать для подстановки в других командах. Директива не определяет элемент данных, она назначает имя какому-либо числу. Пусть в сегменте данных записана директива:
TIME EQU 20
Теперь в какой бы команде или директиве не использовалось бы слово TIME, ассемблер вместо него подставит значение 20.
Например, директиву
FIELD DB TIME DUP (?)
ассемблер преобразует в директиву
FIELD DB 20 DUP (?)
Другой пример:
CON EQU 70
...
MOV CX, CON ;это равносильно записи MOV CX, 70
Директива label
Директива LABEL может создавать имена для любых ячеек памяти независимо от их содержимого и предполагаемого использования. Она содержит информацию о типе определяемого имени, а тип однозначно указывает допустимое определение имени. Директива LABEL имеет следующий формат:
<имя> LABEL <тип>
В качестве типа фигурирует одно из ключевых слов: BYTE, WORD, DWORD, NEAR, FAR.
Пример:
BUFFER LABEL WORD
BUF DB 200 DUP(?)
Директива LABEL обычно применяется для присваивания второго имени некоторой ячейке памяти, с тем, чтобы к ней можно было бы обращаться командами, оперирующими различными типами данных. Если, например, одну и ту же область памяти в одном случае необходимо считать массивом байт, а в другом - массивом слов, то команда
MOV AL, BUF ;передает в аккумулятор AL первый байт массива,
MOV AX, BUFFER ;передает в аккумулятор AX первое слово массива.
Если бы директивы LABEL не было, для передачи в AX первого
слова массива потребовалась бы более громоздкая команда.
Команды сложения и вычитания
По команде сложения второй операнд прибавляется к первому и результат помещается в первый операнд.
Например:
ADD AL, DL ;содержимое регистра DL прибавляется к содержимому регистра AL и полученная сумма помещается в AL.
ADD AL, 3 ;содержимое регистра AL увеличивается на 3.
ADD AL, CATS ;к содержимому регистра AL добавляется содержимое байта памяти с адресом CATS.
ADD DX, [SI] ;к содержимому регистра DX прибавляется содержимое ;слова памяти, адрес которого содержится в регистре SI.
ADD [SI], AL ;содержимое байта памяти, адресуемое регистром SI, увеличивается на значение, хранящееся в регистре AL.
По команде вычитания SUB процессор вычитает второй операнд из первого и результат помещает в первый операнд. Например:
SUB AL, CATS
SUB DX, [SI]
SUB CATS+2, AH
Пример. Пусть в сегменте данных зарезервировано 5 слов со значениями: F501, 7136, 2122, 5711, 1246. Кроме того зарезервировано 10 байт без инициализации. Необходимо получить сумму 2, 5 и 8 байтов указанной последовательности слов. Младший байт результата нужно записать в третий байт последовательности байт. Затем из первого слова последовательности слов вычесть третье и результат записать в пятое слово последовательности байт.
Data segment |
||
l1 label byte |
||
l2 dw 0f501h, 7136h, 2122h, 5711h, 1246h |
||
l3 label word |
||
l4 db 10 dup(?) |
||
data ends |
||
assume cs:code, ds:data |
||
code segment |
||
|
||
start: |
mov ax, data |
;инициализация сегментного регистра |
|
mov ds, ax; |
|
|
mov ax, 0 |
;обнуление регистров: в ax накапливается ;сумма, cx вспомогательный регистр для ;представления считываемого байта как ;слова |
|
mov cx, 0 |
|
|
mov al, l1+1 |
;в регистр аl второй байт последовательности слов |
|
mov cl, l1+4 |
;в регистр сl пятый байт последовательности слов |
|
add ax, cx; |
;в ax сумма 2-го и 5-го байтов |
|
mov cl, l1+7 |
;в cl 8-ой байт последовательности слов |
|
add ax, cx |
;в ax сумма 2-го, 5-го и 8-го байтов |
|
mov l4+2, al |
;младший байт результата заносится в 3-тий байт последовательности l4 |
|
mov ax, l2 |
;в ax заносится значение f501 - первое ;слово последовательности l2 |
|
sub ax, l2+4 |
;из первого слова последовательности вычитается третье. Результат заносится в ax |
|
mov l3+8, ax |
; результат вычитания записывается в ; пятое слово последовательности байт |
|
ret |
|
|
code ends |
|
|
end start |
|
