Хранение более 32 бит в MIPS - PullRequest
1 голос
/ 10 декабря 2011

У меня было много проблем с MIPS для хранения значений в регистрах (не для операций div или multi). Мне нужно хранить или хранить данные с 5 и 8 байтами, например. Как получить значение, например 0x1235343036 (5 байт), в регистре $t3?

Если я сделаю операцию как

li $t3,0x1234
li $t4,0x567812
sll $t3,$t3,24

регистр $t3 содержит только 0x34000000. (12 потеряно. Я хочу что-то вроде 0x1234000000, после выполнения операции "или" с $t4, чтобы получить что-то вроде 0x1234567812 в регистре $t3.)

Я хочу регистры больше 32 бит. Как мне этого добиться?

1 Ответ

1 голос
/ 10 декабря 2011

Я не эксперт по ассемблеру MIPS, но я не думаю, что возможно иметь больший регистр (если ваш процессор не имеет какой-либо SIMD-команды).Вы должны обойти это, используя 2 регистра для эмуляции 64-битных операций.Вот некоторый псевдокод, как вы можете это сделать:

# t1 is high dword of first variable, t2 is low dword of first variable
# t3 is high dword of second variable, t4 is low dword of second variable
# lets assign values to both variables
t1 = 0
t2 = 0x1234
t3 = 0
t4 = 0x567812
#now shift left first by 24 bits
t1 = (t1 << 24) + (t2 >> (32 - 24))
t2 = t2 << 24
#now lets or with second
t1 = t1 | t3
t2 = t2 | t4
...