- •Лабораторная работа №2 описание архитектуры микроконтроллера i80c196kc и макроассемблера mcs-96
- •1.Общие сведения
- •1.1. Обзор архитектуры
- •1.2. Внутренние периферийные устройства
- •1.3. Параметры синхронизации
- •1.4.Карта памяти микроконтроллера i80хc196kc
- •1.4.1. Основные разделы памяти
- •1.4.2. Регистровый файл rf (Register File)
- •1.5. Работа через горизонтальное окно
- •1.5.1. Выбор hWindow
- •1.7. Способы адресации
- •1.8.Описание макроассемблера mcs-96
- •1.8.1. Компоненты языка Ассемблера
- •1.9.Формат оператора
- •1.10. Сегменты
- •1.11. Директивы макроассемблера mcs-96
- •1.12. Признаки результата операции
- •1.13. Пример оформления программы на языке ассемблера mcs96
- •1.14. Анализ особенностей системы команд микроконтроллера
- •2. Порядок выполнения работы
- •2.1.Варианты для самостоятельной тренировки
- •2.2 Варианты для зачета
- •3. Содержание отчета
1.13. Пример оформления программы на языке ассемблера mcs96
Ниже приводится пример оформления программы на языке ассемблера MCS-96. В качестве примера приведена программа умножения двух восьмибитных чисел.
;Программа умножения двух 8-битовых положительных ;чисел.
$nolist ;Запретить листинг
$include (8096.inc) ;Определения регистров
$list ;Разрешить листинг
;******************************************************
rseg at 30h ;Сегмент регистров начиная с 30h
; 00h-17h - SFR's
; 18h - 2Fh - область монитора
RezL: dsb 1 ; Множитель и RezH&ResL - cлово под
RezH: dsb 1 ; результат
M2: dsb 1 ; Множимое
Count: dsb 1 ; Счетчик сдвигов разрядов
;*****************************************************
cseg at 8100h ; Сегмент кода программы
;Умножение 34*3, должно получиться 102
; Далее в комментариях содержимое RezH | RezL
; и действие при каждом прохождении цикла
ld RezL,#34 ; 0 00000000|00100010 сдвиг
ldb RezH,#0 ; 1 00000000|00010001 RezH+M2
; и сдвиг вправо
ldb M2,#3 ; 2 00000001|10001000 сдвиг
ldb Count,#9 ; 3 00000000|11000100 сдвиг
L1: shr RezL,#1 ; 4 00000000|01100010 сдвиг
jnc L2 ; 5 00000000|00110001 RezH +M2
; и сдвиг вправо
addb RezH,M2 ; 6 00000001|10011000 сдвиг
L2: djnz Count,L1 ; 7 00000000|11001100 сдвиг
; 8 00000000|01100110=66h=
; 66h=102= 34 * 3
ret ;Выход из программы
END
1.14. Анализ особенностей системы команд микроконтроллера
Ниже приводятся фрагменты программ, позволяющие оценить основные отличительные особенности системы команд.
$nolist
$include (8096.inc)
$list
;***********************************************
rseg at (30h) ;Сегмент регистров
ptrs: dsl 1
count: dsw 1
r1: dsl 1
r2: dsl 1
cntset: dsw 1
word1: dsw 1
cntset1: dsb 1
byte1: dsb 1
dst: dsb 14*2
;***********************************************
cseg at 8100h ;Сегмент кода программы
; команда BMOV - пересылка блока
ld ptrs,#src ; Источник
ld ptrs+2,#dst ; Приёмник
ld count,#12 ;Счётчик пересылаемых байтов
ldb cntset1,#2 ;Счетчик повторений команды
;BMOV
move: bmov ptrs,count ; Пересылка блока
djnz cntset1,move
; Команда EXT - расширение слова до двойного ;слова
ld r1,#8000h ; число со знаком
ext r1
ld r2,#7000h ; число без знака
ext r2
; команда JBC/JBS - проверка состояния бита
ld count,#5
ld r2,#4
jbs r2,2,m1
ld count,#1
m1: ldb IOPORT1,#0FFH
ld cntset,#0FFFFh
djnzw cntset,$
ldb IOPORT1,#0H
ld cntset,#0FFFFh
djnzw cntset,$
djnzw count,m1
; команды NOTB и NEGB -
ldb r1,#55H
notb r1 ;команда логического отрицания
ldb r2,#55H
negb r2 ;команда инвертирования знака
; команды SHR и SHRA
ldb r1,#80h
shrb r1,#5 ` ;логический сдвиг
ldb r2,#80h
shrab r2,#5 ;арифметический сдвиг
; команды ST и LD
ld r1,#7 ;загрузить слово
st r1,r2 ;записать слово
; команда LDBSE - загрузить байт в слово с расширением знака
ldb byte1,#80h
ldbse word1,byte1
ldb byte1,#10h
ldbse word1,byte1
; команда NORML - нормализация двойного слова
ld r1,#0
ld r1+2,#1h
norml r1,byte1
ret
;*********************************************
src: dcb 'ABCDEFGHIKLMNO'
dcb '12345678123456'
;*********************************************
END