2016-10-08 6 views
0

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

HEXARRAY: .byte '0', '0', '0', '0', '0', '0', '0', '0'.

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

С.Б. $ t0, HEXARRAY ($ t1)

где $ t0 является ИНТ Я хочу, позволяет сказать, 8. и $ t1 является 8, последний байт в массиве.

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

+0

Можете ли вы быть яснее? Что такое 'sb $ t0, HEXARRAY ($ t1)', который не работает? –

+0

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

+0

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

ответ

0

Вы можете вставить слово (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