Я новичок, пытающийся создать ассемблер для MIPS.Любая помощь будет принята с благодарностью.
Предположим, у меня есть этот файл сборки
main: lw $a0, 0($t0)
begin: addi $t0, $zero, 0 # beginning
addi $t1, $zero, 1
loop: slt $t2, $a0, $t1 # top of loop
bne $t2, $zero, finish
add $t0, $t0, $t1
addi $t1, $t1, 2
j loop # bottom of loop
finish: add $v0, $t0, $zero
Я понимаю, что инструкция перехода соответствует формату команды J-типа следующим образом:
Из формата инструкции я понял, что целевой адрес будет двоичным 26-разрядным адресом памяти.Пожалуйста, исправьте меня, если я где-то ошибаюсь до этого момента.
Мне удалось разработать программу, которая считывает файл сборки и точно определяет метки (то есть метки "main" и "loop") и извлекает их соответствующую памятьадреса.
Например: для метки «loop» он расположен по адресу памяти 00401595.
Мне было интересно, можно ли просто преобразовать этот адрес памяти в двоичный файл и добавить его ккод операции для инструкции перехода, смогу ли я получить правильный машинный код для строки:
j loop
или есть другой правильный способ получения целевого адреса для формата команды J-типа?
Кроме того, мой профессор однажды сказал мне, что я могу инициализировать счетчик программы точно равным 0. Итак, я предполагаю, что адрес памяти для "main" будет 0? Есть лиКак я мог сделать это вручную?
Заранее спасибо.