смещение нахождения в мипе в инструкции beq - PullRequest
0 голосов
/ 16 мая 2018

Я новичок в MIPS - 32 и у меня проблемы с пониманием смещения следующей инструкции:

beq $a0,$a1,0x00401200

, зная, что

PC=0x0040122C

Я думаю, что

$a0=00100
$a1=00101

инструкция должна быть 000100 | 00100 | 00101 | 0001 0010 0000 0000.

решение говорит о смещении -12, но я не понимаю, почему.Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 10 октября 2018

Целевой адрес найден по TA = PC + 4(offset)

Итак, offset = (TA - PC)/4

0x00401200 - ваш целевой адрес. Мы видим, что это идет назад, поэтому мы должны убедиться, что наш ответ отрицательный. В этом случае я предпочитаю делать PC - TA, а затем найти дополнение 2s.

PC - TA : 0x0040122C - 0x00401200 = 0x002C

Мы можем найти дополнение 2s, выполнив

0xFFFF(16)-0x002C = 0xFFFD4

Теперь мы можем разделить на 4, чтобы найти ТА, сделав правильный сдвиг на 2 места

1111 1111 1111 1101 0100 -> 11 1111 1111 1111 0101 The offset = 0xFFF5

Я закончил со смещением = -11 (0xFFF5). Однако, если я подключу это обратно в TA = PC + 4 (смещение), я получаю 0x401200.

...