Скачиваний:
20
Добавлен:
01.05.2014
Размер:
1.7 Mб
Скачать

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

Соседние файлы в папке Лабораторные работы по МПС