- •Магомедов и. А. Микропроцессорные системы. Аппаратные и программные средства.
- •Глава 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
Лабораторная работа № 4 Изучение операторов обмена xchg и xlat
Команда обмена XCHG позволяет обменивать содержимое любого общего регистра и ячейки памяти, а также любой пары общих регистров. Примеры:
XCHG AL, SEMA ;обмен содержимого байта памяти и регистра AL
XCHG CX,[BP] ;обмен содержимого слова памяти и регистра CX
XCHG AH,DL ;обмен байтами регистр- регистр
XCHG AX,CX ;обмен словами регистр-регистр
В команде XCHG нельзя использовать сегментные регистры.
Команда XLAT заменяет содержимое аккумулятора AL на байт из 256 байтной таблицы, начальный адрес которой находится в регистре BX (см. рисунок).
Алгоритм выполнения команды XLAT состоит из двух шагов:
a) прибавить содержимое регистра AL к содержимому регистра BX;
б) использовать результат как смещение в сегменте данных (относительно DS) и поместить адресуемый байт из памяти в регистр AL.
Команда XLAT обычно применяется для быстрого преобразования символов из одного символьного кода в другой. Команда XLAT транслирует содержимое одного байта в другое предопределенное значение. При передаче данных между персональными компьютерами и большими ЭВМ с помощью команда XLAT можно выполнять перекодировку данных между форматами ASCII и EBCDIC.
В следующем примере происходит преобразование цифр от 0 до 9 из кода ASCII в код EBCDIC. Представление цифр в ASCII выглядит как шестнадцатеричные 30...39, а в EBCDIC -как шестнадцатеричные F0...F9. Для команды XLAT необходимо определять таблицу перекодировки. Команда XLAT предполагает адрес таблицы в регистре BX, а транслируемый байт (например: поля ASCNO)- в регистре AL.
Следующие команды выполняют подготовку и трансляцию байта:
MOV bx, offset XLTBL
MOV AL,ASCNO
XLAT
Команда XLAT использует значение в регистре AL в качестве относительного адреса в таблице, т.е. складывает адрес в BX и смещение в AL. Если, например, AL содержит 32h, то адрес соответствующего байта в таблице будет XLTBL+50. Этот байт содержит значение 0F2h (2 в коде EBCDIC), которое команда XLAT загружает в регистр AL.
Пример использования в программе оператора XLAT.
В данном примере производится преобразование шести значений из таблицы ASCNO (код ASCII) в код XLTAB. Результат заносится в область памяти с начальным адресом EBCNO.
Assume cs:preob, ds:tabl |
||
tabl segment |
||
ascno db 33h, 35h, 32h, 35h, 37h, 33h |
||
xltab db 0f0h, 0f1h, 0f2h, 0f3h, 0f4h |
||
db 0f5h, 0f6h, 0f7h, 0f8h, 0f9h |
||
ebcno db 6 dup(?) |
||
tabl ends |
||
Preob segment |
||
start: |
|
|
|
mov ax, tabl |
;инициализация сегментного регистра ds |
|
mov ds, ax |
|
|
mov di, offset ebcno |
;адрес таблицы перекодируемых элементов заносится в регистр di |
|
mov si, offset ascno |
; адрес таблицы куда заносится результат |
|
mov bx,offset xltab |
;адрес таблицы, с помощью которой производится преобразование, заносится в регистр bx |
|
mov cx, 6 |
;инициализация счетчика числа перекодируемых элементов A20: очередной перекодируемый байт |
|
mov al, [si] ; в al |
|
|
sub al,30h |
;преобразование ascii кода в число |
|
xlat |
; преобразование содержимого al в код ebcdic |
|
mov [di], al |
;запись преобразованного значения в память |
|
inc di |
;смещение указателя адреса памяти на следующий байт |
|
inc si |
;смещение указателя адреса памяти на следующий байт |
|
loop a20 |
;если cx <>0, переход на метку а20 |
|
ret |
|
|
Preob ends |
|
|
End start |
|
