Спим Инструктаж Дивизион

[0x00400000]    0x3c011000  lui $1, 4096                    ; 5: li $t0, 0x100000F4
[0x00400004]    0x342800f4  ori $8, $1, 244
[0x00400008]    0x8d100000  lw $16, 0($8)                   ; 6: lw $s0, 0($t0)

выше - моя программа spim, мне любопытно, что инструкция li делится на lui, и может кто-нибудь объяснить, что там происходит?

любая помощь оценена спасибо!

2 ответа

Решение

li - это псевдоинструкция (т. е. она не существует в качестве кода операции на процессорах). он всегда расширяется до "немедленной загрузки"; и "или с немедленной" инструкцией:

эффективно: (4096 << 16) || 244

lui инструкция будет пропущена, если число не велико; а также ori будет или с регистром 0.

li - немедленная загрузка Однако значение, которое вы пытаетесь загрузить, слишком велико, чтобы поместиться в раздел непосредственных данных этой инструкции. Поэтому ассемблер разбивает его на две команды, каждая из которых загружает половину этого значения в верхнюю и нижнюю части этого регистра.

Другие вопросы по тегам