Микроконтроллеры, АЦП, память и т.д Темы касающиеся микроконтроллеров разных производителей, памяти, АЦП/ЦАП, периферийных модулей... |
16.02.2011, 11:59
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от kison
|
Ассемблер подставит для ldi R16,77 и cpi R25,5 один и тот же код? Нет? Странно...
|
Ничего он не подставит.
Что программист ему скажет - то он и закодирует - буква в букву.
В указанном мной коде используется один оператор - if. Вы же указываете разные.
А на разные команды он и не может одно и то же подставить.
Последний раз редактировалось omercury; 16.02.2011 в 12:08.
|
|
|
Сказали "Спасибо" omercury
|
|
|
16.02.2011, 12:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от omercury
|
В указанном мной коде используется один оператор - if. Вы же указываете разные.
А на разные команды он и не может одно и то же подставить.
|
Хорошо. Значит на ldi R16,77 и ldi R16,88 подставит одно и то же? Или на ldi R16,77 и ldi R17,77? Команда одна и та же.
|
|
|
|
16.02.2011, 12:23
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от kison
|
Команда одна и та же.
|
Команду он и напишет оду и ту же. Константу же, что удивительно, подставит указанную в команде.
|
|
|
|
16.02.2011, 12:31
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от omercury
|
Команду он и напишет оду и ту же. Константу же, что удивительно, подставит указанную в команде.
|
Команду я ему сам указал. Интересует результат. Он будет разным или одинаковым? Что и как думает транслятор мне не интересно. Если результат одинаковый, то ой.
Если разный, то и if в сишной программе не должен дать одинакового результата. Более того if(a==10) при включенном оптимизаторе может дать разный код на выходе. В зависимости от окружения. При отключенной оптимизации - будет всегда одинаковый давать.
|
|
|
|
16.02.2011, 12:32
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Кстати и о разнице в зависимости только от аргумента. if(a == 5) и if(a == 0) даст разный код.
|
|
|
|
16.02.2011, 13:12
|
|
Почётный гражданин KAZUS.RU
Регистрация: 07.10.2007
Адрес: Луганск
Сообщений: 1,816
Сказал спасибо: 13
Сказали Спасибо 399 раз(а) в 214 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Чего спорим...
Все трансляторы (переводчики с языка на язык) заменяют слова одного языка словами другого, (в том числе и с человеческих языков на человеческие). В случае трансляторов машинных языков, оперирует командами, которые так же можно назвать словами языка.
Например СИ конструкции заменяет блоками ассемблерного кода или непосредстенно блоками машинного кода.
Ассемблерный транслятор подставляет команды ассемблера машинным кодом.
ПРИНЦИПИАЛЬНО (это основное отличие!!!) трансляторы делятся:
КОМПИЛЯТОРЫ - сначала транслирует а потом исполняет.
ИНТЕРПРЕТАТОРЫ - транслирует и исполянет одновремменно.
Больше никаких ПРИНЦИПИАЛЬНЫХ отличий нет.
Так что ассебмлерный транслятор подпадает под определение КОМПИЛЯТОР.
А так же можно сказать, что внутри каждого процессора есть ИНТЕРПРЕТАТОР, который ДЕКОДИРУЕТ машинные коды программы в действия ВНУТРИ ПРОЦЕССОРА, и сразу их исполняет при декодировании.
Сообщение от kison
|
Кстати и о разнице в зависимости только от аргумента. if(a == 5) и if(a == 0) даст разный код.
|
Прикольно.. а в каком компиляторе? )))) их же масса .. для AVR PIС ARM STM и у всех далет разный код?
__________________
"picavr(ГАВ)мыло.ру" USB_Analyzer, Digital_Storage_Oscilloscope "picavr.kr1.ru" заказы в Китай компонентов/изготовление: плат/ЖКИ/мембраных клавиатур/имп трансформаторов
Последний раз редактировалось picavr; 16.02.2011 в 13:19.
|
|
|
|
16.02.2011, 13:26
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от picavr
|
Прикольно.. а в каком компиляторе? )))) их же масса .. для AVR PIV ARM STM и у всех далет разный код?
|
Я пока исключений не встречал. Проверка на 0 может делаться по разному, но она отличается от сравнений с константой. Может быть как and сама с собой, OR так же. Есть масса способов, но все равно компилятор выбирает отличный от тупого сравнения. К примеру avrgcc - выбирает TST Reg, хотя есть команда cpi. Армовский гцц делает AND. Впрочем наверно могут и исключения встретиться, но они лишь подтверждают правило
|
|
|
|
16.02.2011, 13:39
|
|
Гражданин KAZUS.RU
Регистрация: 02.06.2003
Адрес: Челябинск
Сообщений: 545
Сказал спасибо: 10
Сказали Спасибо 341 раз(а) в 202 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от kison
|
Есть масса способов, но все равно компилятор выбирает отличный от тупого сравнения. К примеру avrgcc - выбирает TST Reg, хотя есть команда cpi.
|
На это есть своя причина. Инструкция cpi не работает с первой половиной регистров, инструкция tst работает со всеми регистрами.Все определяется соглашениями по использованию регистров. Сами соглашения, естественно, устанавливаются разработчиками компиляторов. Разные разработчики - разные соглашения. Или нет?
|
|
|
|
16.02.2011, 13:45
|
|
Почётный гражданин KAZUS.RU
Регистрация: 25.05.2010
Адрес: г. Королёв
Сообщений: 8,497
Сказал спасибо: 30
Сказали Спасибо 3,072 раз(а) в 2,013 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от kison
|
Он будет разным или одинаковым? Что и как думает транслятор мне не интересно. Если результат одинаковый, то ой.
|
Команда в AVR состоит из 16 бит. В эти 16 бит входит код команды и аргумент (так уж заложил разработчик ядра). Поэтому эти 16 бит (например для ldi r16,x) с разными константами будут разными, но код команды (код ldi и код r16) - будут одними и теми же. Я их, кстати, на картиночке выделил. Та же песня и с cpi.
Сообщение от picavr
|
внутри каждого процессора есть ИНТЕРПРЕТАТОР
|
Внутри каждого процессора есть программируемая логическая матрица, которая из входных данных (код команды, аргументы) формирует выходные (PC обычный счетчик с параллельной загрузкой и т.д.). Поэтому внутри достаточно больших по ёмкости FPGA нормально размещают процессорные ядра. Например ядро MCS51 на 350MHz - вполне реальная вещь на FPGA.
Сообщение от Bill
|
Инструкция cpi не работает с первой половиной регистров
|
Потому, что первыми 4мя битами закодировано полкоманды (cp..), а вторыми 4мя 32 регистра не адресуешь (..i)...
|
|
|
|
16.02.2011, 14:05
|
|
Почётный гражданин KAZUS.RU
Регистрация: 13.12.2004
Сообщений: 3,172
Сказал спасибо: 11
Сказали Спасибо 692 раз(а) в 504 сообщении(ях)
|
Re: Atmel - в цинковый ящик?!!!
Сообщение от Bill
|
Инструкция cpi не работает с первой половиной регистров, инструкция tst работает со всеми регистрами.
|
Код:
|
21: if(tmp2==0) sei();
+00000038: 2388 TST R24 Test for Zero or Minus
+00000039: F409 BRNE PC+0x02 Branch if not equal
+0000003A: 9478 SEI Global Interrupt Enable |
Регистр далеко не R0.
Сообщение от omercury
|
Команда в AVR состоит из 16 бит.
|
Оператор if в Си не самодостаточен. Ему также нужен аргумент в скобках, без него if не работоспособен. Вот поэтому if (rejim==0 || rejim==1 && soft_start‹zadanie_I) и if(a==10) дают разный код. Однако контекст это не аргумент оператора. Вы же изменили аргумент. Естественно и код будет разный. Я также сделал в ассемблере - регистр и константа для загрузки - аргументы ldi. Результат тоже разный.
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 07:16.
|
|