Определение младшего и старшего байта числа типа int. Нужна подсказка
14.06.2013, 14:46
|
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от _Артём_
|
|
Cortex-M может:
|
Я очень рад за Cortex, честно говоря я с ними дела не имел.
Но во первых:
Вы уверенны что он это делает за 1 цикл?
А во вторых автор темы задавал вопрос относительно gcc-avr.
А AVR уж точно за один цикл сдвинет только на 1 разряд и только один байт.
И порядок байт однозначно от мл. к ст.
И тут уж однозначно через union будет и быстрее и как говорится изящнее.
Последний раз редактировалось AlexPi; 14.06.2013 в 14:51.
|
|
|
|
14.06.2013, 14:53
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
Я
Но во первых:
Вы уверенны что он это делает за 1 цикл?
|
Они так утверждают:
http://infocenter.arm.com/help/index.../CHDDIGAC.html
Сообщение от AlexPi
|
Я
А AVR уж точно за один цикл сдвинет только на 1 разряд и только один байт.
И порядок байт однозначно от мл. к ст.
И тут уж однозначно через union будет и быстрее и как говорится изящнее.
|
Вобщем да.
|
|
|
|
14.06.2013, 14:54
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
|
Вы хотите сказать что процессор сдвинет слово (16 или 32 бита) за одну операцию на заданное кво-во бит?
|
Какое искреннее изумление! 
Не хочу вести сейчас подсчеты, но по-моему, таких процов поболе будет, чем тех, к которым Вы так привязаны. Да вот хотя бы:
__________________
There's always more than one way to skin a cat.
|
|
|
|
14.06.2013, 14:57
|
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
|
Я очень рад за Cortex, честно говоря я с ними дела не имел.
|
Cortex'у очень повезло, в этом случае.
|
|
|
|
14.06.2013, 15:25
|
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от nahimovv
|
Сообщение от AlexPi
Я очень рад за Cortex, честно говоря я с ними дела не имел.
Cortex'у очень повезло, в этом случае.
|
Спасибо тебе "милый" человек на "добром" слове. Земной поклон Вам господин, как говорится.
|
|
|
|
14.06.2013, 15:25
|
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
А вот здесь да, Вы в принципе правы, потому то и 32 бита не всегда хорошо, не оптимально использует память.
Потому-то при переносе кода с восьми битника на 32х битник надо больше памяти.
|
Опять вас огорчу. На простых "светодиод блым-блым" задачах восьмибитник оденет майку лидера, на более-менее крупных и сложных - продует по всем статьям, вчистую.
|
|
|
|
14.06.2013, 15:28
|
|
|
Заблокирован
Регистрация: 25.04.2013
Сообщений: 1,427
Сказал спасибо: 0
Сказали Спасибо 381 раз(а) в 251 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
|
Спасибо тебе "милый" человек на "добром" слове. Земной поклон Вам господин, как говорится.
|
Ну, если вы так ненавидите Cortex... тогда - у MIPS'а тоже с этим всё в порядке.
|
|
|
|
14.06.2013, 17:29
|
|
|
Почётный гражданин KAZUS.RUN
Регистрация: 10.01.2007
Сообщений: 3,411
Сказал спасибо: 65
Сказали Спасибо 664 раз(а) в 443 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
|
Вы уверенны что он это делает за 1 цикл?
|
В ситуации, которая тут обсуждается, даже восьмибитник сделает сдвиг за одну операцию.
Рассмотрим предложенный Вами пример:
Сообщение от AlexPi
|
Судите сами, вот у Вас 8ми битных процессор, а нужно получить старший байт переменной типа long long int.
И что будете делать сдвиг?
long long int A;
char B;
B= A››56;
А теперь прикиньте что процессору придется делать 56 сдвигов для 8ми байт, и того 8*56=448 операций сдвига, не считая вспомогательных процедур (увеличит, сравнить счетчик...).
То что это примерно так и откомпилируется у меня нет сомнений - проверял.
|
Как нетрудно проверить, утверждение, что " процессору придется делать 56 сдвигов" - полная фигня. Скомпилируется это, несмотря на то, что Вы " проверял", совсем не так, как Вы натеоретизировали (© AlexPi:" у меня нет сомнений - проверял"). Скомпилируется это вот так, к примеру:
Тут компилятор разместил переменную в регистрах, поэтому операция свелась к получению char-значения сразу из R20.
Я уж не знаю, что и как Вы " проверял", однако компиляторы чётко секут сдвиги на кратные восьмёрке длины, и просто берут нужный байт, а не двигают до дури, как это делал бы какой-нить теорет Ик... Убедитесь сами:
Вот так оно выглядит на практике...
__________________
There's always more than one way to skin a cat.
|
|
|
|
14.06.2013, 18:34
|
|
|
Прописка
Регистрация: 14.09.2010
Сообщений: 105
Сказал спасибо: 9
Сказали Спасибо 15 раз(а) в 11 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от tempora
|
|
Тут компилятор разместил переменную в регистрах, поэтому операция свелась к получению char-значения сразу из R20.
|
Да нет это вам нужно разобраться.
Вы же показали как компилятор отработал _putchar.
А где же тот код который соответствует строке:
c=lli››56; // где этот код????????????????????????
его вы не привели.
наверняка там будет вызов подпрограммы и возможно не одной, тоже их посмотрите, скорее всего там будут присудствовать инструкции типа:
LSR Rх1
ROR Rх2
ROR Rх3
ROR Rх4
...
Короче говоря я еще раз говорю проверял. Именно через сдвиги там и получается, правда putchar не использовал а именно присваивание.
Приводить куски кода не вижу смысла - у всех компиляторы разные, включены разные опции оптимизации ... .
Последний раз редактировалось AlexPi; 14.06.2013 в 18:46.
|
|
|
|
14.06.2013, 18:47
|
|
|
Гражданин KAZUS.RUN
Регистрация: 16.03.2011
Сообщений: 486
Сказал спасибо: 8
Сказали Спасибо 131 раз(а) в 116 сообщении(ях)
|
Re: Определение младшего и старшего байта числа типа int. Нужна подсказка
Сообщение от AlexPi
|
|
Да нет это вам нужно разобраться.
|
Разбираться вам нужно.
Сообщение от AlexPi
|
А где же тот код который соответствует строке:
c=lli››56; // где этот код????????????????????????
его вы не привели.
|
Он [s]самоликвидировался[/s] соптимизировался. Его нет.
Сообщение от AlexPi
|
наверняка там будет вызов подпрограммы и возможно не одной, тоже их посмотрите, скорее всего там будут присудствовать инструкции типа:
LSR Rх1
ROR Rх2
ROR Rх3
ROR Rх4
...
|
Это ваши фантазии. Вам код привели.
Сообщение от AlexPi
|
|
Короче говоря я еще раз говорю проверял.
|
На чём проверяли? Какие опции оптимизации?
Сообщение от AlexPi
|
|
Именно через сдвиги там и получается
|
Зачем там сдвиги, если можно байт по известному адресу прочитать и передать в функцию?
|
|
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 21:38.
|
|