Спим Инструктаж Дивизион
[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 - немедленная загрузка Однако значение, которое вы пытаетесь загрузить, слишком велико, чтобы поместиться в раздел непосредственных данных этой инструкции. Поэтому ассемблер разбивает его на две команды, каждая из которых загружает половину этого значения в верхнюю и нижнюю части этого регистра.