- •Магомедов и. А. Микропроцессорные системы. Аппаратные и программные средства.
- •Глава 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.
- •Система команд процессораi486
- •П1. Команды пересылки данных
- •П2. Арифметические команды
- •П3. Логические команды
- •П4. Команды переходов
- •П5. Команды процессора i486
Fspec определяет имя файла, наименованного в соответствии с соглашениями dos. Для команды l расширением по умолчанию является “exe”;
параметр addr задает адрес в формате seg:offset. Если сегмент seg не определен, используется значение по умолчанию. Offset может задаваться по разному: это может быть конкретное значение или результат вычисления выражения. Так, например, выражение может иметь вид: DS:SI+BX-123, или ”*”, где “*” является указателем на следующую инструкцию;
Reg – обозначение регистра размером в байт или слово;
Value – может принимать значение некоторого регистра или байта/слова в шестнадцатеричном формате. Если value – “*”, то в качестве значения берется содержимое регистра IP. Десятичное значение записывается как %123, можно использовать арифметические выражения, например AX+BX*3/2. Порядок выполнения вычислений строго определен – слева-направо;
String задает список значений или ascii строк (строка заключена в кавычки) разделенных пробелами или запятой.
Например: 1234 bx, ‘tromb’ ff.
Назначение функциональных клавиш:
F1 - пошаговое выполнение программы с входом в процедуру;
F2 - пошаговое выполнение программы без входа в процедуру;
F3 - повторный запуск программы;
F4 - HELP команд отладчика;
F5 - вход в поле меню установки точек прерывания;
F6 - переключение основного и альтернативного экранов (инициализируется после соответствующей установки);
F7, F8, F9, F10 - установка курсора в нужное поле экрана – up, down, left, right.
Лабораторная работа № 1 Создание выполнимого файла, работа в отладчике, изучение оператора пересылки mov
Целью работы является изучение возможностей отладчика AFD, работа в отладчике с дизассемблированной программой, изучение оператора пересылки MOV.
Создание ехе-файла осуществляется в два этапа. Сначала исходный текст программы компилируется и в результате создается объектный файл. В данном случае компилятором является программа tasm.exe, результатом ее работы является файл с расширением "obj". Запуск программы tasm осуществляется следующим образом:
tasm <имя файла с исходным текстом>.
Так, если Вы создали файл с ассемблерной программой revek.asm, то результатом работы программы tasm revek (здесь revek является исходной информацией для tasm) будет файл revek.obj. Следующим шагом в создании ехе-файла является шаг компоновки. Компоновка будет осуществляться следующим образом:
tlink <имя объектного файла> - tlink revek.
В результате выполнения последней операции будет получен выполнимый файл revek.exe.
Оператор mov
Оператор пересылки MOV (переслать, передать) осуществляет пересылку байта или слова из источника (src) в получатель (dst):
dst:=(src)
Форматы команды MOV:
1. MOV mem/reg, mem/reg ;
2. MOV reg, data ;
3. MOV mem/reg, data
4. MOV ac, mem ;
5. MOV mem, ac ;
6. MOV sreg, mem/reg ;
7. MOV mem/reg, sreg,
где ac - аккумулятор, mem - память, reg - регистр, sreg - сегментный регистр
Следует помнить, что пересылка возможна только между регистрами и между регистром и памятью (пересылка типа память-память здесь невозможна).
Пример использования оператора пересылки MOV:
№ пп |
Оператор |
|
1. |
Mov ax, bx |
;пересылка содержимого регистра BX в AX. |
2. |
Mov cx, 0e563 |
;число E563 записывается в регистр СХ. |
3. |
Mov ver, 34ac или Mov [0037], 34ac |
;число 34AC заносится в память, в одном случае адрес слова памяти обозначен символической переменной VER, а во втором случае адрес памяти непосредственно указан в программе. В память при этом будет записано два байта т.е. записываемое слово будет размещено в двух ячейках памяти с адресами: 0037 и 0038. При этом младший байт AC будет размещен по младшему адресу, а старший байт 34 - по старшему, поэтому в окне отладчика Вы видите число 34AC как AC34. |
4. |
Mov al, ver Или Mov al, [0037] |
;пересылка осуществляется из ячейки памяти с символическим адресом в регистр, т.е. содержимое ячейки памяти (один байт) с адресом 0037 будет занесено в однобайтовый регистр AL |
5. |
Mov ver, al Или Mov [0037], al |
;осуществляется операция обратная выше описанной. |
6. |
Mov ds, ax |
;инициализируется значение сегментного регистра DS. В сегментный регистр нельзя записать число, непосредственно указав его в команде MOV. Эту операцию выполняют, используя какой-либо промежуточный регистр или память. Так, чтобы записать в регистр SS число 3415 необходимо выполнить следующие действия: MOV AX, 3415h MOV SS, AX. |
7. |
Mov [0046], es |
;содержимое сегментного регистра ES заносится в память. |
Ниже приводится текст программы, которую следует использовать в для работы в отладчике AFD.
Текст программы SL1
name ex |
||
assume cs:code,ds:dat,ss:stak |
||
stak segment word stack |
||
dw 100 dup(?) |
||
stk_top label word |
||
stak ends |
||
dat segment |
||
; резервирование места в памяти под строку символов, начальный адрес строки - ll |
||
ll db 'ПРИВЕТ учащимся DPTI !!!$' |
||
dat ends |
|
|
code segment |
;начало кодового сегмента |
|
start proc far |
|
|
|
push ds |
|
|
mov ax,0 |
|
|
push ax |
|
|
mov ax,dat |
;инициализация ; сегментных ; регистров |
|
mov ds,ax |
|
|
mov es,ax |
|
|
mov ax,600h |
;очистка экрана, |
|
mov bh,41h |
;установка |
|
mov cx,0 |
;цветового |
|
mov dx,184fh |
;режима |
|
int 10h |
|
|
mov ah,02 |
;установить положение курсора |
|
mov bh,00 |
; на странице 0, |
|
mov dh,12 |
; в строке 12, |
|
mov dl,20 |
; в столбец 30 |
|
int 10h |
; вызов прерывания BIOS |
|
mov ah,09h |
;вывод на экран строки |
|
lea dx,ll |
;символов, записанных по |
|
int 21h |
;адресу ll |
|
mov ah,00 |
;ожидание ввода символа с экрана |
|
int 16h |
|
|
ret |
|
|
start endp |
|
|
code ends |
;конец кодового сегмента |
|
end start |
|
