ПоддерживаюBOB51 писал(а):Может про мой ""слэнг" в работе с многофайловыми проектами" под ассемблером потрындеть?
Добавлено after 2 minutes 6 seconds:
главное, что бы в "слэнге" слов неприличных не былоBOB51 писал(а):мой ""слэнг"
ПоддерживаюBOB51 писал(а):Может про мой ""слэнг" в работе с многофайловыми проектами" под ассемблером потрындеть?
главное, что бы в "слэнге" слов неприличных не былоBOB51 писал(а):мой ""слэнг"
Код: Выделить всё
;________________________
;таблица объявленных имен - переназначение регистров РОН
;
; принята базовая модель:
; область ограниченного функционала
; .def mfr0 = r0 ; (математика и обмен с ПЗУ/самопрограммирование)
; .def mfr1 = r1 ; (математика и обмен с ПЗУ/самопрограммирование)
; .def = r2 ;(ограниченный функционал)
; .def = r3 ;(ограниченный функционал)
; .def = r4 ;(ограниченный функционал)
; .def = r5 ;(ограниченный функционал)
; .def = r6 ;(ограниченный функционал)
; .def = r7 ;(ограниченный функционал)
; .def = r8 ;(ограниченный функционал)
; .def = r9 ;(ограниченный функционал)
; .def = r10 ;(ограниченный функционал)
; .def = r11 ;(ограниченный функционал)
; .def = r12 ;(ограниченный функционал)
; .def = r13 ;(ограниченный функционал)
; .def = r14 ;(ограниченный функционал)
; .def = r15 ;(ограниченный функционал)
; область полного функционала
.def tmp0 = r16 ; рабочий регистр (полный функционал)
.def tmp1 = r17 ; рабочий регистр (полный функционал)
; .def = r18 ;(полный функционал)
; .def = r19 ;(полный функционал)
; .def = r20 ;(полный функционал)
; .def = r21 ;(полный функционал)
; .def = r22 ;(полный функционал)
; .def = r23 ;(полный функционал)
; .def = r24 ;("указатель базы" полный функционал)
; .def = r25 ;("указатель базы" полный функционал)
; Xl = r26 ; адрес сегмента Х (полный функционал)
; Xh = r27 ; адрес сегмента Х (полный функционал)
; Yl = r28 ; адрес сегмента Y (полный функционал)
; Yh = r29 ; адрес сегмента Y (полный функционал)
; Zl = r30 ; адрес сегмента Z (полный функционал ПЗУ/самопрограммирование)
; Zh = r31 ; адрес сегмента Z (полный функционал ПЗУ/самопрограммирование)
; регистры Xh:Xl, Yh:Yl, Zh:Zl определены в дефайне изготовителя и в системе команд
; изменение их имени хотя и возможно, но нежелательно -
; возникает путаница с интегрированной абревиатурой системы команд
; в случае с "малой моделью" допускающей/достаточной для размещения ВСЕХ
; используемых ВСЕМИ подпрограммами регистров в области СОЗУ регистрового
; файла одновременно (без "подкачки" наборов параметров через ОЗУ)
; рекомендовано переназначение индивидуальных имен регистров
; согласно текущей задачи
;Конечно интересно!BOB51 писал(а):Если интересно
Код: Выделить всё
.def rZero = R15 ; всегда ноль
Хорошо, этот вариант применения вычеркиваем!Jack_A писал(а):специальная команда TST Rn
Это обязательное условие!!!.akl писал(а):не только дефайнить, но и обнулять его
AT90S2313 ?BOB51 писал(а):Есть еще для нескольких МК, но те пока не проверялись в проектах.
Код: Выделить всё
;
; "mdf_avr.txt" файл объявленных имен, бит и констант
; (шаблон основного файла определений проекта)
;
;------------------------------------------------------
; variable definitions
;(таблица обьявленных имен)
;
; определение метки многофайлового проекта
; ставится только в основном файле определений проекта
#ifndef disposit
#define disposit
#endif
;
;
;________________________
;таблица обьявленных имен - пользовательские константы
;
; .equ name/label = const / expr
; define datas
;________________________
; блок определений
;
;таблица обьявленных имен - переназначение регистров РОН
;
;
; принята базовая модель:
; область ограниченного функционала
; .def mfr0 = r0 ; (математика и обмен с ПЗУ/самопрограммирование)
; .def mfr1 = r1 ; (математика и обмен с ПЗУ/самопрограммирование)
; .def s_sreg = r2 ; зеркало SREG(ограниченный функционал)
; .def sys_flag = r3 ; системные флаги(ограниченный функционал)
; .def = r4 ; (ограниченный функционал)
; .def = r5 ; (ограниченный функционал)
; .def = r6 ; (ограниченный функционал)
; .def = r7 ; (ограниченный функционал)
;
; .def = r8 ; (ограниченный функционал)
; .def = r9 ; (ограниченный функционал)
; .def = r10 ; (ограниченный функционал)
; .def = r11 ; (ограниченный функционал)
; .def = r12 ;(ограниченный функционал)
; .def = r13 ;(ограниченный функционал)
; .def = r14 ;(ограниченный функционал)
; .def = r15 ;(ограниченный функционал)
;
; область полного функционала
.def tmp0 = r16 ; рабочий регистр(полный функционал)
.def tmp1 = r17 ; рабочий регистр(полный функционал)
.def tmp2 = r18 ; рабочий регистр(полный функционал)
.def tmp3 = r19 ; рабочий регистр(полный функционал)
.def tmp4 = r20 ; рабочий регистр(полный функционал)
.def tmp5 = r21 ; рабочий регистр(полный функционал)
.def tmp6 = r22 ; рабочий регистр(полный функционал)
.def tmp7 = r23 ; рабочий регистр полный функционал)
;
.def Bl = r24 ; "указатель базы"(полный функционал)
.def Bh = r25 ; "указатель базы"(полный функционал)
; Xl = r26 ; адрес сегмента Х (полный функционал)
; Xh = r27 ; адрес сегмента Х (полный функционал)
; Yl = r28 ; адрес сегмента Y (полный функционал)
; Yh = r29 ; адрес сегмента Y (полный функционал)
; Zl = r30 ; адрес сегмента Z (полный функционал ПЗУ/самопрограммирование)
; Zh = r31 ; адрес сегмента Z (полный функционал ПЗУ/самопрограммирование)
; регистры Xh:Xl, Yh:Yl, Zh:Zl определены в дефайне изготовителя и в системе команд
; изменение их имени хотя и возможно, но нежелательно -
; возникает путаница с интегрированной абревиатурой системы команд
; в случае с "малой моделью" допускающей/достаточной для размещения ВСЕХ
; используемых ВСЕМИ подпрограммами регистров в области СОЗУ регистрового
; файла одновременно (без "подкачки" наборов параметров через ОЗУ)
; рекомендовано переназначение индивидуальных имен регистров
; согласно текущей задачи
;
;________________________
;таблица обьявленных имен - секция флагов пользователя
;
; .equ name/label = expr
;
; флаги в регистре flags
;________________________
;таблица обьявленных имен - секция определенных данных (ОЗУ)
;
.dseg
.org SRAM_START
;
; label: .byte expr
;________________________
;таблица обьявленных имен - секция определенных данных (EEPROM)
;
.eseg
; label: .byte expr
;________________________
Код: Выделить всё
;
; "macross__proto.txt" ; файл описания макросов (шаблон)
;
.macro xchrr ; псевдокоманда "обмен регистра/акумулятора/ с регистром"
eor @0,@1 ; вызывается как xchrr rd,rs
eor @1,@0
eor @0,@1
.endmacro
;
.macro ldiw ; псевдокоманда "загрузка слова в регистровую пару /X,Y,Z/"
ldi @0l,low(@1) ; вызывается как ldiw rp,0xnnnn или ldiw rp,name
ldi @0h,high(@1) ; (где name=0xnnnn, rp=x,y,z)
.endmacro
;в проектах для АТмега8 я нулевым делаю ZH, так как все данные у меня лежат в начале ОЗУ (0x60 - 0xFF), когда ZH = 0. поэтому у меня нет необходимости выделять отдельный регистр для нуля.ДядяВован писал(а):В своих проектах один из регистров "делаю нулевым" (для AVR)
Мудро!!!Starichok51 писал(а):нулевым делаю ZH
Это если не обращаться к данным во флэше или индексные переходы не использовать.Starichok51 писал(а):в проектах для АТмега8 я нулевым делаю ZH, так как все данные у меня лежат в начале ОЗУ
С этой точки зрения и выбрал R15.BOB51 писал(а):Зачем полнофункциональные занимать?
Код: Выделить всё
; Очистка регистров R0-R31
ldi ZL, (0x1F-2) ; Адрес регистра R29
clr ZH
st Z, ZH
dec ZL
brne PC-2
clr ZL
clr ZHКод: Выделить всё
; Очистка регистров R0-R31
ldi ZL, (0x1F-2) ; Адрес регистра R29
clr ZH
st Z, ZH
dec ZL
brne PC-2
clr ZL
; ------------------------------------
; Выключить аналоговый компаратор
ldi R16, (1<<ACD)
out ACSR, R16Код: Выделить всё
.ifdef SPH
LDI R16, High ( RAMEND )
OUT SPH, R16
.endif
LDI R16, Low ( RAMEND )
OUT SPL, R16
; очистка регистров
LDI ZL, 30
CLR ZH
DEC ZL
ST Z, ZH
BRNE PC - 2
Точно..ДядяВован писал(а):Аналогично. Подобный