О MIPS фунтах и ​​с.б. - PullRequest
       21

О MIPS фунтах и ​​с.б.

0 голосов
/ 28 ноября 2018

Я только что прочитал комментарий @Cheshar в этот ответ - Загрузка и сохранение байтов в MIPS .

  1. Это мои рассуждения относительно его первого пункта:значение в $t0 должно быть 0xFFFFFF90 (т. е. с расширением знака), но это не изменит результат mem(4) (я думаю, это означает, что слово, начинающееся с 0x04), которое все еще равно FFFF90FF.Я прав?

    Но я не уверен насчет его второго пункта:

    ["] lb и sb не заботится о порядке байтов.[. "]

  2. Я думаю о том, почему переход от старшего к младшему порядку байтов равен

    byte:  0   1   2   3   ----\   3   2   1   0
          00  90  12  A0   ----/  00  90  12  A0
    

    , поэтому кажется, чтоотдельный байт по-прежнему читается как big endian?

1 Ответ

0 голосов
/ 28 ноября 2018

lb/sb делать не заботиться о бесконечности.Существует нет порядкового номера для одного байта.

Это имеет значение только в том случае, если вы сохраняете порядковый номер с большим / маленьким байтом [(например) 4 байта] и затем пытаетесьдоступ к нему побайтный.

Смещения byte изменяют , а не , поэтому лучшая диаграмма может быть:

byte:  0   1   2   3   ----\   0   1   2   3
      00  90  12  A0   ----/  A0  12  90  00

Если$t1 указывает на сохраненное вами целое число, когда вы делаете:

lb  $t0,1($t1)

Вы получаете 90 для младшего порядка и 12 для большого порядкового номера.


ОБНОВЛЕНИЕ:

Я приветствую ваш ответ, так как он чистый.Но разве вы не думали, что это противоречит интуиции раньше?Поскольку в младшем порядке порядка байтов 32-разрядное целое число не имеет смысла при чтении 32-разрядных данных все вместе слева направо или справа налево ...?

После того, как данные находятся в регистре (черезlw), мы визуализируем и оперируем ею как с прямым порядком байтов (т. Е. Сдвиг влево на 1 умножается на 2).

Десятичное значение 123 является "старшим порядком байтов" (сто + двадцать)+ три).

Little endian - это просто порядок байтов, когда мы выбираем или сохраняем в памяти.Аппаратное обеспечение будет тасовать байты по мере необходимости.

Преимущество little endian состоит в том, что оно лучше работает для больших чисел с несколькими точными значениями (например, libgmp).

И, когда Intel впервые выпустила8-битный процессор 8080 (только с однобайтовой шиной памяти), little-endian сделал вещи быстрее.Например, при выполнении add после выборки младшего бита со смещением 0 он мог бы добавить два байта младшего бита параллельно с выборкой старшего бита со смещением 1.

Чтобы получитьпример: 8-разрядное (без знака) целое число b00100001 равно 33 (десятичное число), но с меньшим порядковым номером оно сохраняется как b00010010, которое равно 18 (десятичное) при чтении с слева направо и b01001000, что64 + 8 = 72 (десятичное) при чтении с справа налево , бит за битом.

В то время как возможно для [теоретического]компьютерная архитектура ведет себя так, как вы описываете, ни один современный [о котором я знаю] не делает.Это отчасти потому, что для этого требуются более сложные схемы.

Тем не менее, я когда-то написал пакет математических вычислений, в котором действительно использует байты с младшим порядком байтов и биты с прямым порядком байтов в пределахбайт.Но это было медленно .Иногда это полезно для больших битовых векторов (например, шириной 500 000 бит)

Или моя идея совершенно неверна, поскольку компьютер может видеть только байт как абстракцию базовых битов.

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

Различный порядковый номер относится только к многобайтовомуцелые числа (например, в C, int или short).

...