Rst7 5 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба Я требую продолжения темы! Именно. Пока тут скучно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба Аааа.... так вот откуда это все !!! Ядро и система команд МК AVR с самого начала создавались в сотрудничестве с фирмой IAR Systems — производителем компиляторов для языков программирования C/C++. Не угадайт! Надо ширее: максимальная приближенность синтаксиса директив асма к сям творит чудеса, самые известные из которых - совместное использование хедеров *.h и там и там. Такшта - движение вроде правильное, но с криворуким вывертом. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба оформляйте как 0x01 и т.д. всегда будет моноширно и всегда правильно. Шестнадцатиричные числа не всегда уместны. aaarrr, ну кончайте жечь про наглядность и безопасность конструкций PC+2, ибо не верю, что человек который осознает философию "пробела", не может не видеть что такая конструкция только ухудшает наглядность, сопровождаемость и безопасность кода. Последний раз высказываю свое мнение: Конструкция вида PC + x, где -3 <= x <= 3, может считаться наглядной и безопасной за исключением двух случаев: 1. Патологической невнимательности пишущего 2. Незнания оным системы команд Все, точка. Сами можете ставить бессмысленные метки через команду на ассемблере и писать исключительно по правилам MIRSA на "C". Только не забывайте, что подобные ограничения показаны далеко не всем. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба Извините, я всю тему не смог осилить. Начинал я когда-то давно на 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 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
NullPointer 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба ...локальные метки.У нас есть локальные метки. Также у нас есть флудовая тема и пятница. Требую: все свои претензии пользователяилибудет стыдно Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба У нас есть локальные метки. Если бы были, то не было бы флуда. Он вызван исключительно убогостью аврасма. А претензии послушать всегда интересно, да. Одной аж на 12 страниц хватило :) Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
zombi 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба У нас есть локальные метки. А как хоть выглядят ЛОКАЛЬНЫЕ МЕТКИ? А то акромя как в макросах невидел нигде. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба Вот так примерно. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VslavX 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба Вот так примерно. %F, %B - это все ноги от убогого MASM-овского стиля локальных меток растут - далеко не самый удачный пример, имхо. Проще же написать @@Loop, @@Exit и не думать куда оно там - вперед, назад. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 68 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба ИМХО, удобнее циферку поставить. Ну да каждому свое, главное, чтобы сама возможность была. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба Не угадайт! Надо ширее: максимальная приближенность синтаксиса директив асма к сям творит чудеса... Такшта - движение вроде правильное, но с криворуким вывертом. Ну одно из чудес криворукого синтаксиса нам здесь уже продемомстрировали. :) Самое интересное, что использование лидирующего нуля, как идентификатора восьмеричных чисел, предписано непосредственно стандартом языка Си. Вот, так вот! Можно сказать, триумф идиотизма. P.S. Всегда подозревал, что Си - гуано, но не думал, что до такой степени... Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба P.S. Всегда подозревал, что Си - гуано, но не думал, что до такой степени... Ви не умеете им лечить, етим мумиё. :) Тем более, что другого нету (равного по уровню продуманности, конечно). Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Гость @Ark 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба Тем более, что другого нету (равного по уровню продуманности, конечно). О, да! Уровень продуманности обозначения восьмеричных чисел, просто потрясает! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 15 апреля, 2011 Опубликовано 15 апреля, 2011 · Жалоба О, да! Уровень продуманности обозначения восьмеричных чисел, просто потрясает! Это мы так скоро коллекцию глобальных претензий соберем :) А мне тоже не нравится. Причем давно, одна штука char a,b; int c; c=a*b; никогда не делается с использованием доступных аппаратных средств, я имею ввиду расширитель аккумулятора А:В для 51-х, либо пары регистров R0:R1 для АВР либо PRODL:PRODH для пиков. Причем, и в паскале ( знаете, есть PMP такой) - та же фигня. Как я зол! Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться