[an error occurred while processing this directive]
Шизуха ежиков косила: BIG | LITTLE ENDIAN (+)
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено Evgeny_CD 20 июля 2005 г. 13:17

Попытался я достичь "академического просветления" в своей башке на тему порядка байтов, и у меня окончательно ее (башку)снесло. Пытаюсь разобраться.


[b31-byte_dword_3-b24][b23-byte_dword_2-b16][b15-byte_dword_1-b8][b7-byte_dword_0-b0]
|~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~dword_0~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
[b15--byte_word_1--b8][b7--byte_word_0---b0][b15--byte_word_1-b8][b7--byte_word_0-b0]
|~~~~~~~~~~~~~~~~~~word_1~~~~~~~~~~~~~~~~~~||~~~~~~~~~~~~~~~~~word_0~~~~~~~~~~~~~~~~|

b0 - бит 0 - младший бит - LSB
b31 - бит 31 - старший бит - MSB

byte_dword_0 - младший байт - LSB
byte_dword_3 - старший байт - MSB

word_0 - младший word - LSW (его так и вправду обозначают???)
word_1 - старший word - MSW (его так и вправду обозначают???)

byte_word_0 - младший байт - LSB
byte_word_1 - старший байт - MSB

BASE - адрес dword_0

********************** BIG ENDIAN ******************************************************
* байты внутри word - {BIG ENDIAN}, старшие вначале
* байты внутри dword - {BIG ENDIAN}, старшие вначале
* word внутри dword - {BIG ENDIAN}, старшие вначале

word_0{BIG ENDIAN}----BASE+0x00 = [byte_dword_3] = word_1{BIG ENDIAN}-[byte_word_1]
\---BASE+0x01 = [byte_dword_2] = \[byte_word_0]
\--BASE+0x02 = [byte_dword_1] = word_0{BIG ENDIAN}-[byte_word_1]
\-BASE+0x03 = [byte_dword_0] = \[byte_word_0]
*****************************************************************************************

*********************** LITTLE ENDIAN ***************************************************
* байты внутри word - {LITTLE ENDIAN}, младшие вначале
* байты внутри dword - {LITTLE ENDIAN}, младшие вначале
* word внутри dword - {LITTLE ENDIAN}, младшие вначале

word_0{LITTLE ENDIAN}----BASE+0x00 = [byte_dword_0] = word_0{LITTLE ENDIAN}-[byte_word_0]
\---BASE+0x01 = [byte_dword_1] = \[byte_word_1]
\--BASE+0x02 = [byte_dword_2] = word_1{LITTLE ENDIAN}-[byte_word_0]
\-BASE+0x03 = [byte_dword_3] = \[byte_word_1]
*****************************************************************************************

*** А это что за нафиг??? И как его назвать??? Насколько я понимаю, так PDP-11 жила... **
* байты внутри word - {BIG ENDIAN}, старшие вначале
* word внутри dword - {LITTLE ENDIAN}, младшие вначале
* байты внутри word ????

word_0{CRAZY_1}----BASE+0x00 = [byte_dword_1] = word_0{BIG ENDIAN}-[byte_word_1]
\---BASE+0x01 = [byte_dword_0] = \[byte_word_0]
\--BASE+0x02 = [byte_dword_3] = word_1{BIG ENDIAN}-[byte_word_1]
\-BASE+0x03 = [byte_dword_2] = \[byte_word_0]
*****************************************************************************************

************************** комплементарное извращение ***********************************
* байты внутри word - {LITTLE ENDIAN}, младшие вначале
* word внутри dword - {BIG ENDIAN}, старшие вначале
* байты внутри word ???
word_0{CRAZY_2}----BASE+0x00 = [byte_dword_2] = word_1{LITTLE ENDIAN}-[byte_word_0]
\---BASE+0x01 = [byte_dword_3] = \[byte_word_1]
\--BASE+0x02 = [byte_dword_0] = word_0{LITTLE ENDIAN}-[byte_word_0]
\-BASE+0x03 = [byte_dword_1] = \[byte_word_1]
*****************************************************************************************


Интересно, а в 64 битных машинках все тоже не договорились, и там существуют 8 комбинаций индианов???

Вопрос: когда говорят ARM LITTLE ENDIAN, ARM BIG ENDIAN - какая из комбинаций имеется в виду? Они у всех ARMов одинаковы????

Как с индианностью у разных компилеров AVR, PIC?

Составить ответ  |||  Конференция  |||  Архив

Ответы


Отправка ответа

Имя (обязательно): 
Пароль: 
E-mail: 
NoIX ключ Запомнить

Тема (обязательно):
Сообщение:

Ссылка на URL: 
Название ссылки: 

URL изображения: 


Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru