- •Магомедов и. А. Микропроцессорные системы. Аппаратные и программные средства.
- •Глава 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
Прямая адресация
Наиболее естественный способ адресации данных - это прямая адресация, когда адрес нужной ячейки памяти является частью команды, например:
mov AL, A ;содержимое ячейки с адресом А помещается в регистр AL.
Аналогичным способом можно произвести и обратное действие:
mov A, AL ;содержимое регистра AL пересылается в ячейку памяти, адрес которой определяется в результате трансляции ассемблером символического имени А.
Косвенная адресация
Существует способ адресации памяти, при котором исполнительный адрес выбирается из некоторого регистра, а не из самой команды. Например, в команде
mov AL, [DI]
исполнительный адрес содержится в регистре DI; квадратные скобки указывают на то, что содержимое регистра DI является адресом некоторой ячейки памяти. Описанным способом можно использовать любой из четырех регистров SI, DI, BX, BP.
Чтобы занести адрес в один из указанных регистров можно использовать конструкцию offset:
mov BX, offset AB
Благодаря присутствию здесь оператора offset в регистр BX загрузится адрес области памяти с именем AB.
Команда
mov AX, [BX]
занесет в регистр AX (аккумулятор) значение 3145h. Если дважды инкрементировать (т.е. увеличить на единицу) содержимое регистра ВХ и снова выполнить эту же команду в регистре АХ окажется значение 4456h:
INC BX
INC BX
MOV AX, [BX] ;в регистре АХ значения 4456h.
Напишем простую программу, выполнение которой будем наблюдать в отладчике. Пусть в сегменте данных резервируется два слова. Запишем в первое слово значение 27FC, во второе - 573А.
dat SEGMENT; начало сегмента данных
A dW 2 dup (?)
dat ENDS ;конец сегмента данных
ASSUME CS: cod, ds: dat
cod SEGMENT; начало кодового сегмента
START: mov AX, dat ;инициализация
mov DS, AX ; сегментного регистра
mov A, 27FCh ;запись числа в первое зарезервированное слово
mov A+2, 573Ah ; запись числа во второе зарезервированное слово
RET
cod ENDS ; конец кодового сегмента
END START
Директива assume
Директива ASSUME сообщает Ассемблеру назначение каждого сегмента. Так. в директиве ASSUME приведенной программы, показывается, что сегмент с именем cod является кодовым сегментом (в нем содержится программа), а сегмент с именем dat является сегментом данных и он соотносится с регистром DS.
Индивидуальные задания
Написать программу, в которой в сегменте данных резервируется память под следующие данные:
Имя |
вариант 1 |
вариант 2 |
вариант 3 |
вариант 4 |
вариант 5 |
Т1 |
5 слов без инициализации (исп. DUP) |
строка символов "веселый день" |
1 двойное слово без инициализации |
1 байт без инициализации |
2 слова без инициализации (исп.DUP) |
T2 |
строка символов "кислые щи" |
6 слов без инициализации (исп.DUP) |
послед. 4 байт: 82h,137,А5h, 1100111B |
4 слова со значением E48Ah (исп.DUP) |
последовательность 4 слов: A83h, F47h, 892, 101110111B |
T3 |
3 слова со значением. A584h (исп.DUP) |
Последовательность . 6 байт 89h, 10010010B, 254, AAh, -112, 7Fh |
5 слов со значением EF3Ah (исп.DUP) |
строка символов "промозглая сырость" |
строка символов "острова в океане" |
Т4 |
Последовательность 4 байт 4Ah, F7h, -54, 111101B |
последовательность. 2 слов: 7777h, 8888h |
строка символов "кошкин дом" |
последов. 3 байт: 84h, -111, CEh |
5 байт со знач. 55h (исп.DUP) |
Имя |
вариант 6 |
вариант 7 |
вариант 8 |
вариант 9 |
вариант 10 |
T5 |
6 слов без инициализации (исп.DUP) |
строка символов "бедная овечка" |
1 двойное слово без инициализации |
1 байт без инициализации |
2 слова без Инициализации (исп.DUP) |
T6 |
строка символов “литературный вечер" |
3 слова без инициализации (исп.DUP) |
Последовательность 4 байт: 82h,137,А5h, 1100111B |
4 слова со значением E48Ah (исп.DUP) |
последовательность 4 слов: A83h, F47h,892, 101110111B |
T7 |
2 слова со значением F4E8h (исп.DUP) |
последовательность 5 байт AEh,1011011B, 135, F4h, -96 |
4 слова со значение E73Ah (исп.DUP) |
строка символов "паук каракурт" |
строка символов "муха цокотуха" |
T8 |
последовательность 6 байт 7Eh, B5h, -103, 1110100B, 250 |
последовательность 3 слов: EEF7h, 12A8h, CA34h |
строка символов "ночь в опере" |
последовательность 3 байт -35h, -107, FAh |
6 байт со значением F4h (исп.DUP) |
При выполнении последующих пунктов задания использовать оператор MOV.
1. Инициализировать сегментные регистры DS, ES
2. Записать по адресу
вариант 1 |
вариант 2 |
вариант 3 |
вариант 4 |
вариант 5 |
Т3+2 слово 3333h |
Т2+2 слово 4444h |
Т3+4 слово 7777h |
T1 байт FAh |
T4+1 байт FAh |
вариант 6 |
вариант 7 |
вариант 8 |
вариант 9 |
вариант 10 |
Т5+4 слово BCCBh |
Т6+4 слово FAFAh |
Т7+6 слово AA56h |
T5 байт 7Ah |
T8+3 байт FAh |
3. Занести в указанный регистр адрес ячейки, используя синтаксическую конструкцию с "OFFSET":
вариант 1 |
вариант 2 |
вариант 3 |
вариант 4 |
вариант 5 |
BX, T1+4 |
SI, T2 |
DI, T1+2 |
BX, T2+6 |
SI, T3+1 |
вариант 6 |
вариант 7 |
вариант 8 |
вариант 9 |
вариант 10 |
BX, T7+2 |
SI, T6 |
DI, T7+4 |
BX, T8+2 |
SI, T5+3 |
4. Занести в регистр AX содержимое указанного сегментного регистра
вариант 1 |
вариант 2 |
вариант 3 |
вариант 4 |
вариант 5 |
DS |
SS |
ES |
CS |
DS |
вариант 6 |
вариант 7 |
вариант 8 |
вариант 9 |
вариант 10 |
ES |
CS |
DS |
SS |
ES |
5. Записать в память значение аккумулятора (слово), адресуемое указанным регистром
вариант 1 |
вариант 2 |
вариант 3 |
вариант 4 |
вариант 5 |
BX |
SI |
DI |
BX |
SI |
вариант 6 |
вариант 7 |
вариант 8 |
вариант 9 |
вариант 10 |
BX |
SI |
DI |
BX |
SI |
6. Инкрементировать дважды значение адреса в регистре, указанном в предыдущем пункте. Инкрементировать значение аккумулятора. Использовать оператор INC reg.
7. Повторить пункт 5.
8. Используя оператор MOV изменить шестую букву в строке символов на букву "W".
Пример оформления программы приведен ниже.
assume cs:code, ds:dat |
||
dat segment |
||
t1 db 'тучи над городом' |
||
t2 dw 7 dup(?) |
||
t3 dw 1f47h,1222h,10011011b,1345h,6789 |
||
t4 dw ? |
||
t5 dw 0a45h |
||
dat ends |
||
code segment |
||
start: |
||
|
mov ax, dat |
|
|
mov ds, ax |
|
|
mov t4, 2222h |
|
|
mov ax, ds |
|
|
mov cx, offset t3 |
|
|
mov bx, cx |
|
|
mov dx, [bx] |
|
|
mov t3+6, 1111 |
; в память по адресу Т3+6 (т.е.30) ; заносит ся значение 1111 |
|
mov si, offset t2 |
; в регистр заносится адрес Т2, ; который равен 16 |
|
mov ax, 1112h |
|
|
mov [si], ax |
; в память по адресу, хранящемуся в SI, заносится значение аккумулятора |
|
inc si |
;инкрементирование содержимого ;регистра SI (содержимое SI увеличить на 1) |
|
inc si |
|
|
inc ax |
|
|
mov ax, cs |
|
|
mov [si], ax |
|
|
ret |
|
|
code ends |
|
|
end start |
|
