Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PC +/- …
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Страницы: 1, 2, 3, 4
zombi
Цитата(aaarrr @ Apr 14 2011, 19:32) *
В первом случае 8 и 9 в результате напрочь отсутствуют.

У Вас отсутствуют? странно!
У меня компилятор грязно ругается. И слава богу ведь еслиб он промолчал то я наверное поседел бы пока габли искал biggrin.gif

Цитата(_Pasha @ Apr 14 2011, 19:47) *
для экономии времени добавлю: проблема в том, что лидирующий ноль - это восьмеричная цифра.

Оказалось все гораздо проще biggrin.gif
Теперь хоть спать спокойно можно.
aaarrr
Цитата(_Pasha @ Apr 14 2011, 19:47) *
ЗЫ для экономии времени добавлю: проблема в том, что лидирующий ноль - это восьмеричная цифра.

Это замечательно, но зачем же молча выкидывать не соответствующие нотации значения? Впрочем, 3.56 старенький, а в новых вот пофиксили - ругается теперь.
zombi
О, как опасно оказалось форматировать таблицы незначащими нулями. Надо блин отвыкать.
aaarrr
Это нелюбовь к пробелам боком выходит, я так считаю sm.gif
_Pasha
Вот я вспоминаю - в начале 90-х один знакомый за неделю вечеров неспешно написал асм для 51-х, вставил туда REPT/IRP/IRPC -в общем, все как надо. Бага была стратегическая - все в *.BIN выдавал, другие форматы какбы не надо было - оно ж для себя laughing.gif
Так вот - релиза было два - во втором ни одной баги типа "тихой сапой" что-нить проигнорировать. Неужели асм51 настолько проще аврасма? biggrin.gif
@Ark
Цитата
Это нелюбовь к пробелам боком выходит, я так считаю sm.gif

Нет. Это у писателей компилятора кривые руки. Я так считаю. sm.gif
Интересно, сколько народу уже наступило на эти грабли. И еще наступит...
zombi
Цитата(@Ark @ Apr 14 2011, 20:29) *
Нет. Это у писателей компилятора кривые руки. Я так считаю. sm.gif
Интересно, сколько народу уже наступило на эти грабли. И еще наступит...

Как им вообще пришла идея использовать лидирующий ноль как идентификатор восмеричного числа?
Можно-ж было что-то другое придумать.
Интересно,а как часто в программах вы используете восьмеричную систему?
Мне,например, ни разу в жизни не понадобилось.
@Ark
Цитата
Как им вообще пришла идея использовать лидирующий ноль как идентификатор восмеричного числа?
Можно-ж было что-то другое придумать.

Конечно! Любой спецсимвол до или после числа.
Числа без указания системы счисления всегда естественным образом воспринимаются как десятичные.
Нарушать это - значит закладывать геморрой на ровном месте. Числа 08 и 09 вам хотя бы компилятор "обругает",
а такие как 010, 055, 077 - пропустит даже не предупредив ни о чем... Самое печальное, что исправить это уже
нельзя в следующих версиях - совместимости не будет...
Цитата
Интересно,а как часто в программах вы используете восьмеричную систему?
Мне,например, ни разу в жизни не понадобилось.

Последний раз видел в PDP-11. Лет 20 назад...
aaarrr
Цитата(zombi @ Apr 14 2011, 21:07) *
Мне,например, ни разу в жизни не понадобилось.

Если писать на "C", то иногда нужна. На AVR'овском ассемблере не использовал никогда (да и на других, кажется, тоже).
zombi
Цитата(aaarrr @ Apr 14 2011, 21:22) *
Если писать на "C", то иногда нужна.

Аааа.... так вот откуда это все !!!
Ядро и система команд МК AVR с самого начала создавались в сотрудничестве с фирмой IAR Systems — производителем компиляторов для языков программирования C/C++.
Wise
Цитата(Rst7 @ Apr 14 2011, 14:44) *
Нет. Суть темы - явно в кривых руках топикстартера. А это локальный оффтопик про якобы "говносистему команд".

..Мои руки ничуть не кривей ваших.. Или, кто палку взял, тот и капрал?
А вот, что у атмег "говносистема команд", да и не только, совершенно верно замечено.. rolleyes.gif
Rst7
QUOTE
..Мои руки ничуть не кривей ваших..


"Не льсти себе, подойди ближе" (ЦЭ)

QUOTE
А вот, что у атмег "говносистема команд", да и не только, совершенно верно замечено..


Ололо, начнем холиварчег 08.gif Давно не было sm.gif
Wise
Цитата(Rst7 @ Apr 15 2011, 02:26) *
"Не льсти себе, подойди ближе" (ЦЭ)

Я про чьи-то кривые руки, ничего здесь не сказал.
Это ты не льсти себе.. rolleyes.gif
Ну и подходи по одному.. rolleyes.gif
defunct
Цитата(zombi @ Apr 14 2011, 19:02) *
О, как опасно оказалось форматировать таблицы незначащими нулями. Надо блин отвыкать.

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



Насчет PC+X, на фоне всего гонива (не огнива), что здесь лилось из лагеря партии aaarrr + rx3apf. Реальный и единственный аргумент в пользу конструкции PC+X сказал только @Ark (наудивление - не сторонник этой конструкции) - это прыжек в середину команды. Применение - повышение криптостойкости к взлому. Но так ли она нужна на МК?

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


PS: во времена DOS применял конструкцию $+X для обмана эвристических анализаторов типа DrWeb, но для достижения желаемого результата пришлось x86 освоить до уровня "дизассеблера на глаз":

Код
mov  ax, 0x3e2d;   db 0xb8, 0x2d, 0x3e
sjmp $-4;   db 0xeb, 0xfc


в результате выполнения этих четырех команд в AH получалось 0x52 - после чего int 21h и в кармане список списков ОС, дальше делай с системой что хочешь. Ну а про наглядность - даже дизассемблер не покажет какие еще две команды здесь спрятаны, только трассировщик и то не каждый.
SysRq
Я требую продолжения темы!

Цитата(Wise @ Apr 12 2011, 14:04) *
..А вообще, атмега - редкое фуфло..
Я как-нибудь соберу в кучу все свои претензии пользователя, да и выложу..
Пусть им (атмеговцам) будет стыдно.. rolleyes.gif
Rst7
QUOTE
Я требую продолжения темы!


Именно. Пока тут скучно.
_Pasha
Цитата(zombi @ Apr 14 2011, 20:28) *
Аааа.... так вот откуда это все !!!
Ядро и система команд МК AVR с самого начала создавались в сотрудничестве с фирмой IAR Systems — производителем компиляторов для языков программирования C/C++.

Не угадайт! Надо ширее: максимальная приближенность синтаксиса директив асма к сям творит чудеса, самые известные из которых - совместное использование хедеров *.h и там и там. Такшта - движение вроде правильное, но с криворуким вывертом.
aaarrr
Цитата(defunct @ Apr 15 2011, 04:30) *
оформляйте как 0x01 и т.д. всегда будет моноширно и всегда правильно.

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

Цитата(defunct @ Apr 15 2011, 04:30) *
aaarrr, ну кончайте жечь про наглядность и безопасность конструкций PC+2, ибо не верю, что человек который осознает философию "пробела", не может не видеть что такая конструкция только ухудшает наглядность, сопровождаемость и безопасность кода.

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

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

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

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

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 ;


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

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. Если кому-то интересно - то архив с исходниками этой крошечной утилиты в аттаче. Там же проект и уже готовая собранная утилита.

Нажмите для просмотра прикрепленного файла
SysRq
Цитата(VslavX @ Apr 15 2011, 15:12) *
...локальные метки.
У нас есть локальные метки.

Также у нас есть флудовая тема и пятница.
Требую:
Цитата(Wise @ Apr 12 2011, 14:04) *
все свои претензии пользователя
или
Цитата(Wise @ Apr 12 2011, 14:04) *
будет стыдно
aaarrr
Цитата(SysRq @ Apr 15 2011, 16:09) *
У нас есть локальные метки.

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

А претензии послушать всегда интересно, да. Одной аж на 12 страниц хватило sm.gif
zombi
Цитата(SysRq @ Apr 15 2011, 16:09) *
У нас есть локальные метки.

А как хоть выглядят ЛОКАЛЬНЫЕ МЕТКИ?
А то акромя как в макросах невидел нигде.
aaarrr
Вот так примерно.
VslavX
Цитата(aaarrr @ Apr 15 2011, 16:02) *
Вот так примерно.

%F, %B - это все ноги от убогого MASM-овского стиля локальных меток растут - далеко не самый удачный пример, имхо. Проще же написать @@Loop, @@Exit и не думать куда оно там - вперед, назад.
aaarrr
ИМХО, удобнее циферку поставить. Ну да каждому свое, главное, чтобы сама возможность была.
@Ark
Цитата
Не угадайт! Надо ширее: максимальная приближенность синтаксиса директив асма к сям творит чудеса...
Такшта - движение вроде правильное, но с криворуким вывертом.

Ну одно из чудес криворукого синтаксиса нам здесь уже продемомстрировали. sm.gif
Самое интересное, что использование лидирующего нуля, как идентификатора восьмеричных чисел, предписано непосредственно стандартом языка Си. Вот, так вот! Можно сказать, триумф идиотизма.
P.S. Всегда подозревал, что Си - гуано, но не думал, что до такой степени...
_Pasha
Цитата(@Ark @ Apr 16 2011, 01:52) *
P.S. Всегда подозревал, что Си - гуано, но не думал, что до такой степени...

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

О, да! Уровень продуманности обозначения восьмеричных чисел, просто потрясает! biggrin.gif
_Pasha
Цитата(@Ark @ Apr 16 2011, 02:08) *
О, да! Уровень продуманности обозначения восьмеричных чисел, просто потрясает! biggrin.gif

Это мы так скоро коллекцию глобальных претензий соберем sm.gif
А мне тоже не нравится. Причем давно, одна штука
Код
char a,b;
int c;

c=a*b;

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