Перейти к содержанию
    

Я требую продолжения темы!

 

Именно. Пока тут скучно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Аааа.... так вот откуда это все !!!

Ядро и система команд МК AVR с самого начала создавались в сотрудничестве с фирмой IAR Systems — производителем компиляторов для языков программирования C/C++.

Не угадайт! Надо ширее: максимальная приближенность синтаксиса директив асма к сям творит чудеса, самые известные из которых - совместное использование хедеров *.h и там и там. Такшта - движение вроде правильное, но с криворуким вывертом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

оформляйте как 0x01 и т.д. всегда будет моноширно и всегда правильно.

Шестнадцатиричные числа не всегда уместны.

 

aaarrr, ну кончайте жечь про наглядность и безопасность конструкций PC+2, ибо не верю, что человек который осознает философию "пробела", не может не видеть что такая конструкция только ухудшает наглядность, сопровождаемость и безопасность кода.

Последний раз высказываю свое мнение:

 

Конструкция вида PC + x, где -3 <= x <= 3, может считаться наглядной и безопасной за исключением двух случаев:

1. Патологической невнимательности пишущего

2. Незнания оным системы команд

 

Все, точка. Сами можете ставить бессмысленные метки через команду на ассемблере и писать исключительно по правилам MIRSA на "C". Только не забывайте, что подобные ограничения показаны далеко не всем.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Извините, я всю тему не смог осилить.

Начинал я когда-то давно на MACRO-11, надо сказать мне сильно повезло, это был 'правильный' ассемблер и там сразу была заложена концепция локальных меток как в тексте программы так и в макросредствах. Поэтому эта концепция прочно засела у меня в голове и использование в инструкциях аргументов типа PC+смещение (.+смещение, $+смещение и прочее) воспринимается, мягко говоря, странно.

Потом был Борландовский TASM, также прекрасно поддерживающий локальные метки. А вот потом пошли всякие i51, 8080, Фуджитцы, AVR (лень все перечислять - как архитектуры так и ассемблеры) и я начал сильно страдать. Если бОльшая часть ассемблеров еще как-то поддерживала локальные метки в макросах, то собственно в коде с этими метками была беда. Вот тогда пришла идея написать препроцессор локальных меток. Идея самая заурядная - в коде выделяются границы блоков локальных меток (по первому символу строки - если символ может принадлежать имени обычной (нелокальной) метки - то граница блока) и в пределах этого блока все слова с определенным префиксом (в TASM это было "@@", но можно взять любое понравившееся сочетание) заменяются на такое же слово но с удаленным префиксом и с добавленным числовым суффиксом. Таким образом локальные метки становятся общими и уникальными для текущего файла.

 

Пример, исходный текст

Int_UART_STxD:	push	R23			;
	push	R17			;
	lds	R23,SP_Flags		;
	sbrc	R23,SNFl_RXoff		;
	rjmp	@@SendXOFF		;
	sbrc	R23,SNFl_RXon		;
	rjmp	@@SendXON		;
	sbrc	R23,SNFl_Xoff		;
	rjmp	@@ReadyTxd		;
					;
	lds	R16,SP_DrvEnd		;
	lds	R17,SP_DrvBeg		;
	cp	R16,R17			;
	breq	@@ReadyTxd		;
	push	Z1			;
	push	Z0			;
	mov	Z0,R16			;
	clr	Z1			;
	subi	Z0,low(-SP_DrvBuf)	;
	sbci	Z1,high(-SP_DrvBuf)	;
	ld	R17,Z+			;
	out	UDR,R17			;
	pop	Z0			;
	pop	Z1			;
	inc	R16			;
	cpi	R16,TBufSiz		;
	brlo	@@Wrapup		;
	clr	R16			;
@@Wrapup:	sts	SP_DrvEnd,R16		;
					;
@@Exit:         sts	SP_Flags,R23		;
	pop	R17			;
	pop	R23			;
	pop	R16			;
	out	SREG,R16		;
	pop	R16			;
	reti				;
					;
@@ReadyTxd:	cbi	UCR,UDRIE		;
	rjmp	@@Exit			;
					;
@@SendXOFF:	cbr	R23,(1<<SNFl_RXoff)	;
	ldi	R16,_XOFF		;
	out	UDR,R16			;
	rjmp	@@Exit			;
					;
@@SendXON:	cbr	R23,(1<<SNFl_RXon)	;
	ldi	R16,_XON		;
	out	UDR,R16			;
	rjmp	@@Exit			;

 

Текст после препроцессора:

Int_UART_STxD:	push	R23			;
	push	R17			;
	lds	R23,SP_Flags		;
	sbrc	R23,SNFl_RXoff		;
	rjmp	SendXOFF_0058		;
	sbrc	R23,SNFl_RXon		;
	rjmp	SendXON_0059		;
	sbrc	R23,SNFl_Xoff		;
	rjmp	ReadyTxd_0060		;
					;
	lds	R16,SP_DrvEnd		;
	lds	R17,SP_DrvBeg		;
	cp	R16,R17			;
	breq	ReadyTxd_0060		;
	push	Z1			;
	push	Z0			;
	mov	Z0,R16			;
	clr	Z1			;
	subi	Z0,low(-SP_DrvBuf)	;
	sbci	Z1,high(-SP_DrvBuf)	;
	ld	R17,Z+			;
	out	UDR,R17			;
	pop	Z0			;
	pop	Z1			;
	inc	R16			;
	cpi	R16,TBufSiz		;
	brlo	Wrapup_0061		;
	clr	R16			;
Wrapup_0061:	sts	SP_DrvEnd,R16		;
					;
Exit_0062:         sts	SP_Flags,R23		;
	pop	R17			;
	pop	R23			;
	pop	R16			;
	out	SREG,R16		;
	pop	R16			;
	reti				;
					;
ReadyTxd_0060:	cbi	UCR,UDRIE		;
	rjmp	Exit_0062			;
					;
SendXOFF_0058:	cbr	R23,(1<<SNFl_RXoff)	;
	ldi	R16,_XOFF		;
	out	UDR,R16			;
	rjmp	Exit_0062			;
					;
SendXON_0059:	cbr	R23,(1<<SNFl_RXon)	;
	ldi	R16,_XON		;
	out	UDR,R16			;
	rjmp	Exit_0062			;

Пишем и редактируем исходный код, а ассемблеру подсовываем результат препроцессора.

 

Позже препроцессор оброс еще всякими полезными функциями - преобразование табуляций, удаление комментариев (недавно особенно хорошо было отрубать букву 'я' в комментах для IAR-ского кортексовского ассемблера). В-общем, программа 15 лет в строю и зарекомендовала себя как универсальный инструмент с десятком разных ассемблеров. Изначально была написана на TASM для MS-DOS, но недавно Win7 отказался запускать .com файл - пришлось переписать под Win32. Если кому-то интересно - то архив с исходниками этой крошечной утилиты в аттаче. Там же проект и уже готовая собранная утилита.

 

atxt32.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

...локальные метки.
У нас есть локальные метки.

 

Также у нас есть флудовая тема и пятница.

Требую:

все свои претензии пользователя
или
будет стыдно

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У нас есть локальные метки.

Если бы были, то не было бы флуда. Он вызван исключительно убогостью аврасма.

 

А претензии послушать всегда интересно, да. Одной аж на 12 страниц хватило :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У нас есть локальные метки.

А как хоть выглядят ЛОКАЛЬНЫЕ МЕТКИ?

А то акромя как в макросах невидел нигде.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вот так примерно.

%F, %B - это все ноги от убогого MASM-овского стиля локальных меток растут - далеко не самый удачный пример, имхо. Проще же написать @@Loop, @@Exit и не думать куда оно там - вперед, назад.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ИМХО, удобнее циферку поставить. Ну да каждому свое, главное, чтобы сама возможность была.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
Не угадайт! Надо ширее: максимальная приближенность синтаксиса директив асма к сям творит чудеса...

Такшта - движение вроде правильное, но с криворуким вывертом.

Ну одно из чудес криворукого синтаксиса нам здесь уже продемомстрировали. :)

Самое интересное, что использование лидирующего нуля, как идентификатора восьмеричных чисел, предписано непосредственно стандартом языка Си. Вот, так вот! Можно сказать, триумф идиотизма.

P.S. Всегда подозревал, что Си - гуано, но не думал, что до такой степени...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

P.S. Всегда подозревал, что Си - гуано, но не думал, что до такой степени...

Ви не умеете им лечить, етим мумиё. :) Тем более, что другого нету (равного по уровню продуманности, конечно).

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость @Ark
Тем более, что другого нету (равного по уровню продуманности, конечно).

О, да! Уровень продуманности обозначения восьмеричных чисел, просто потрясает! :biggrin:

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

О, да! Уровень продуманности обозначения восьмеричных чисел, просто потрясает! :biggrin:

Это мы так скоро коллекцию глобальных претензий соберем :)

А мне тоже не нравится. Причем давно, одна штука

char a,b;
int c;

c=a*b;

никогда не делается с использованием доступных аппаратных средств, я имею ввиду расширитель аккумулятора А:В для 51-х, либо пары регистров R0:R1 для АВР либо PRODL:PRODH для пиков. Причем, и в паскале ( знаете, есть PMP такой) - та же фигня. Как я зол!

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Гость
Эта тема закрыта для публикации ответов.
×
×
  • Создать...