Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Основы программирования на ассемблере

#.1. Программирование в мнемонических кодах и трансляция

#.2. Процесс трансляции исходной программы

#.3. Основные правила языка ассемблера

Программа –последовательность операторов. Операторы могут содержать до пяти полей: метки, команды, операндов, комментария, переноса. Поля разделяются символами пробела или табуляции. Конец оператора –символы Enter. Все поля не обязательны.

Назначение поля Содержимое Примечание
Поле метки Имя (до 255 алфавитно-цифро­вых символов и подчёркива­ние; первый символ –не цифра) Имя используется для ссылок на про­граммный объект, описанный в опе­раторе. Если поле начинается не с первой позиции, то Имя замыкается двоеточием.
Поле команды Мнемокод команды процессора или директива ассемблера Поле не может начинаться с первой позиции
Поле операндов Один или несколько операндов команды или директивы Операнды разделяются запятыми
Поле комментария Пояснительная информация Первый символ поля –точка с запятой (;) или двойной слеш (//). Может начинаться с любой позиции. Заканчивается символами Enter.
Поле переноса Обратный слеш (\) Оператор продолжается на следующей строке.

 

Операнды - числовые константы:

Двоичные константы-B’0101 0b0101 0101B

Восьмиричные константы- Q’37 0377 377Q

Десятичные константы- D’1234 1234 1234D

Шестнадцатиричные константы- H’ff 0xFF 0FFH

 

#.4. Директивы ассемблера

Директивы ассемблера определяют структуру программы и управляют процессом трансляции:

А) Директивы определения программного модуля

.PROGRAM name1 // начало модуля с именем name1

… // тело модуля

.END // конец модуля

Б) Директивы определения секции

.SECTION name2, type, allocation

type определяет содержимое секции:

CODE –исполняемый код программы;

DATA –переменные величины;

IO–данные в области регистров периферийных устройств.

allocation определяет начальный адрес секции:

ALLIGN={1|2|4} - 1 –с любого адреса,
2- с чётного адреса,
4 –с адреса, кратного четырём;

LOCATE=addr –с адреса addr, где addr –целая константа.

 

Пример.

.PROGRAM prg1

.SECTION INIT, DATA, ALIGN=2

.SECTION ROM, CODE, ALIGN=2

.END

В) Директивы определения форматов данных

Определение целых чисел.

[name].DATA.s op1[, op2]…

где s -спецификатор размерности чисел op1, …:

I-один бит.

B-байт (8 битов).

W-слово (16 битов). Формат по умолчанию.

E-расширенное слово (24 бита).

L -двойное слово (32 бита).

[name].DATAВ.s op1, op2-числом op2заполняется блок из op1

 

Пример.

val1.DATA.B 0x12, 35, -1

arr1.DATAB.B 0x12, 35

 

Г) Директивы резервирования памяти

[name].RES.s op1

Пример.

dat1.RES.B 2

 

Д) Директивы управления адресом

.SKIP val //$←$+val

.ORG val//$← val

$ -локальный счётчик в секции

 

Е) Директивы компоновки программ

.EXPORT name1, name2

.IMPORT name3, name4

.GLOBAL name5, name 6

 

Ж) Директива определения меток

nMax.EQU 0xFFF

newData.REG (RW0)

 

И) Директива определения банков

.ASSIGNBANK bank_reg:section[, section]…

где bank_reg:{DTB|PCB|SPB|ADB} –имя регистра банка, section -имя секции,

Пример.

.ASSIGNBANK ADB:DATA1

 

К) Директивы препроцессора

В фазе препроцессора производится предварительная обработка исходной программы: расширение макровызовов, замена макроимён, чтение файла. Директивы препроцессора начинаются символом # в первой позиции строки.

-Макрокоманды

#macro name_macro [,param[,param]…] //name_macro -имя макрокоманды;

//[,param[,param]…] –формальные параметры.

#local lab[, lab]… // объявления локальных меток

… (макро-тело)

#endm

 

Макровызов:

name_macro [,ор[, ор]…] //op –фактический параметр; param ← ор.

 

#macro get_timer addr,reg ü

#local loop ü ï

loop: MOV R0, #addr ï ï

MOV reg, @R0 ý Макро-тело ý Макроопределение

CMP reg, #0 ï ï

BNE loop þ ï

#endm þ

// get_timer –имя макрокоманды

//addr и reg - формальные параметры

//loop - локальная метка

 

get_timer H’100,R1 // Макровызов;

//0х100, R1 –фактические параметры

__00001loop: ü

MOV R0,#H’100 ï

MOV R1,@R0 ý Макрорасширение

CMP R1,#0 ï

BNE __00001loop þ

 

-Директивы определения макро-имени

Макро-имя (name) может определять строку символов (string) или вычисляемую константу (cоnst):

#define name string //name ← string –строка символов

#set name cnst //name ←cnst -вычисляемая константа

 

#undef name //окончание области замены

 

.PROGRAM P1

#define DW.DATA.W

#set N 1

DW N →.DATA.W 1

#set N N+1

DW N →.DATA.W 2

#undef DW

DW.DATA.W H’FF0

MOVW A, DW

MOV R0, #N

 

-Директива включения файла

#include file_name // file_name - текстовой файл, хранящийся на диске

 

<== предыдущая лекция | следующая лекция ==>
В.3.2. Структура блока ЦАП | Машинные команды
Поделиться с друзьями:


Дата добавления: 2014-01-11; Просмотров: 456; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.021 сек.