Разделите 32-битный int на 2 подписанных 16-битных шорта - PullRequest
0 голосов
/ 20 ноября 2019

Есть ли какой-нибудь простой способ разбить значение 32-битных регистров на 2 подписанных 16-битных шорта каждый?

Я думал об этом:

#t0 holds the 32bit value containing the 2 signed shorts

sra  $v0, $t0, 16  #extract the 1st signed short and put it in v0
li   $t1, 0xffff   #create a mask
and  $v1, $t0, $t1 #extract the 2nd signed short and put it in v1   

Но это разрушило бызнак второго значения верно? Есть ли простой способ, который не требует маскировки знака 2 значений в другом регистре и перемещения его в v1 после?

1 Ответ

2 голосов
/ 21 ноября 2019

Чтобы подписать младшие биты, нужно сдвинуть влево, а затем вправо назад

sll $v1, $t0, 16
sra $v1, $v1, 16

Демонстрация на Проводник компилятора

...