Л/Р: Микроконтроллеры МСS-51: команды обработки данных
Цель работы: изучение команд арифметических и логических операций, сдвигов и битовых операций, практическое освоение приемов программирования на ассемблере, изучение директив.
Задание:
Code ;--------------------программа demo4.asm------------------------------ ;---------------------раздел объявлений------------------------------- ADDRH EQU 0Fh; Старший байт адреса внешней памяти ADDR1L EQU 00h; Младший байт адреса 1-байта 1-го операнда ADDR2L EQU 10h; Младший байт адреса 1-байта 2-го операнда ADDR3L EQU 20H; Младший байт адреса 1-байта результата<br>NCIRCLE EQU 16<br>;----------------------исполняемая часть ----------------------------- ORG 00H; Директива размещения программы Mov P2,#ADDRH; Через Р2 выдается ст.байт адреса внеш. памяти Mov R0,#ADDR1L; В R0 - адрес 1-операнда Mov R1,#ADDR2L; В R1 - адрес 2-операнда Mov 08h,#ADDR3L; В ячейку 08 - адрес результата Mov R2,#NCIRCLE; В R2 - счетчик циклов = 2*N чисел LP1: JB 0D5h,LP2; При флаге F0=1 флаг переноса не очищается Clr C LP2: MovX A,@R0; Чтение байта 1-операнда Mov R3,A; и пересылка его в R3 Movx A,@R1 Чтение байта 2-операнда AddC A,R3 Сложение байтов с учетом флага переноса SetB 0D3h; Переключение на банк 1 Movx @R0,A; Запись байта результата во внешнюю память Clr 0D3h; Переключение на банк 0 Inc R0; Указатель 1-операнда переводится на следующий байт Inc R1; Указатель 2-операнда переводится на следующий байт Inc 08h; Указатель результата переводится на следующий байт Cpl 0D5h; Флаг F0 управляет очисткой флага переноса DJNZ R2,LP1; зацикливание, если есть еще байты операнды SJmp $ End ;--------------------------------------------------------- Эта программа читает восемь пар двухбайтных операндов из внешней памяти данных, складывает операнды побайтно с учетом флага переноса и посылает результаты также во внешнюю память. В программе, кроме уже встречавшейся нам директивы ORG, использованы директивы EQU, с помощью которых определяются имена констант, встречающихся далее в тексте. Этими константами являются значения старшего и младших байтов адреса областей внешней памяти, где хранятся операнды и результаты, количество циклов сложения. Старший байт адреса равен 0Fh и одинаков для всех областей, младший адрес области первых операндов начинается с 00h, вторых операндов – 10h, результата – 20h. Количество циклов равно 2 байта * 8 операндов = 16. Для сокращения числа команд внутри цикла предусмотрена одинаковая обработка первых байтов операндов, которые складываются без учета переноса, и вторых байтов, складываемых с учетом значения бита С. Единый цикл использует команду ADDC, но дополнительно привлекается флаг F0 из регистра PSW, изменяющий свое значение при каждом проходе. При F0==0 (обработка первых байтов) бит переноса обнуляется. Такой алгоритм применим только для 16-разрядных операндов. Для работы программы необходим счетчик, три указателя на области внешней памяти и флаг обнуления бита переноса. В качестве счетчика циклов используется регистр R2. Его содержимое декрементируется и проверяется командой DJNZ, которая организует цикл. В качестве указателей на ячейки-источники операндов используются регистры R0 и R1 банка 0. На текущую ячейку-приемник результата указывает регистр R0 банка 1 (ячейка 08h внутреннего ОЗУ), поэтому перед записью необходимо переключить текущий банк, а перед наращиванием указателей источников сделать это вновь. © Иркутский государственный университет путей сообщения, отчёт студента Добавил: mauzer (30.10.2010) | Категория: Не из ВолгГТУ Просмотров: 3470 | Загрузок: 0 | Рейтинг: 0.0/0 | |
Комментарии (0) | |