Сохранить байт int в MIPS

#mips

#mips

Вопрос:

Я использую PCSpim, и у меня проблема, у меня есть массив символов для вставки значения шестнадцатеричного числа, назовите его HEXARRAY.

ШЕСТНАДЦАТЕРИЧНЫЙ массив: .byte ‘0’,’0′,’0′,’0′,’0′,’0′,’0′,’0′.

и я хочу вставить целое число, выполнив

sb $ t0, ШЕСТНАДЦАТЕРИЧНЫЙ МАССИВ ($ t1)

где $ t0 — это нужное мне значение, скажем, 8. а $ t1 — это 8, последний байт в массиве.

int имеет 4 байта в MIPS, как я могу вставить int в 1 байт?

Комментарии:

1. Не могли бы вы выразиться яснее? Что с sb $t0, HEXARRAY($t1) этим не работает?

2. sb хранит только байт, что означает 1 байт, а целое число равно 4 байтам, как я могу вписать 4 байта в этот 1 байт, где для моего целого требуется только 1 байт (от 127 до -128)

3. Биты (как и байты) являются единицей измерения. Просить уместить 4 байта в 1 байт — это все равно, что просить уместить 4 литра воды в 1 литр воды. Вы не можете этого сделать, не выбросив часть этого. То же самое и с вашим вопросом, поэтому я попросил разъяснений. sb сохраняет только младший значащий байт (отбрасывая остальные 3 байта), поэтому, если любое возможное число in $t0 находится в пределах 0-255 или -128-127 (это диапазоны, для которых требуется только 1 байт), вы можете использовать sb без каких-либо проблем. Если это не так, вы должны указать, какую «воду» выбросить.

Ответ №1:

Вы можете вставить слово (32 бита), выполнив ‘sw’ = сохранить слово … что-то вроде:

 number:   .word 8      # your number is 8
space:    .space 20    # adress to save your number

la $t3, number         # loading the adress of your number 8
lw $t3, 0($t3)         # NOTICE that with 'lw' you are taking your WHOLE WORD = number 8

la $s1, space
sw $t3, 0($s1)         # where $t3 is your number and $s1 the adress you want to save it
  

Если вы не хотите сохранять все число 8, но сохраните отдельные байты вашего номера… вы можете сделать это в разных адресах $ s1.

Что-то вроде:

 sb $t3, 0($s1)    # you are storing the byte'00001000' in the 1st adress of $s1
addi $s1, $s1, 1  # adding 1 to the adress where you want to save your next byte
srl $t3, $t3, 3   # moving your number 8 (in binary) to the right... so you can
                  # 'sb' = store byte (a different one) again in $s1