Потому что порядок байтов - это произвольное проектное решение. В регистре нет порядка байтов 1 .
Порядок байтов возникает, когда мы обращаемся к меньшим единицам, таким как байты. Это принципиально произвольное решение, которое принимает дизайнер ЦП: с прямым или обратным порядком байтов.
Полезно упростить ситуацию и понять, что это в основном соединение с периферийными устройствами, которые упорядочены байтами. Да, это может быть обнаружено с помощью байтовой адресации, как вы уже доказали, но в целом скалярные значения загружаются и сохраняются как единицы измерения в регистры, и в этом случае порядок байтов ничего не меняет. Наиболее значимые биты находятся «слева», по крайней мере, так, как мы обычно пишем числа. И именно поэтому операторы <<
и >>
всегда дают одинаковые результаты на машинах с прямым порядком байтов по сравнению с машинами с прямым порядком байтов при использовании в соответствии со стандартами языка.
Но чтобы считывать и записывать потоки данных на периферийные устройства, вы вынуждены выбирать порядок байтов. Это связано с тем, что периферийные устройства являются устройствами потоковой передачи байтов. Наименьший адрес имеет младшие биты или младшие? Это делалось в обе стороны, и раньше лагеря были довольно равномерно разделены.
Поскольку сама память адресуется в байтах, безусловно, можно получить другое поведение без периферийного устройства, но обычно это не происходит без преднамеренного взгляда внутрь, как вы сделали.
Представьте себе ЦП, который не имеет байтов, только 32-битных слов, с адресами 0, 1, 2. Компилятор C создает char, int и long все 32-битные объекты. (Это разрешено Cx9.) Ничего себе, никаких проблем с порядком байтов! Это оба! Но .. что происходит, когда мы подключаем наше первое периферийное устройство ??
1. Ну, у x86 есть регистры, которые имеют псевдонимы регистров меньшего размера, но это другая история.