#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