Как работает инструкция перехода и адрес перехода в MIPS? - PullRequest
0 голосов
/ 22 февраля 2019

Я новичок, пытающийся создать ассемблер для 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-типа следующим образом:

enter image description here

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

Мне удалось разработать программу, которая считывает файл сборки и точно определяет метки (то есть метки "main" и "loop") и извлекает их соответствующую памятьадреса.

Например: для метки «loop» он расположен по адресу памяти 00401595.

Мне было интересно, можно ли просто преобразовать этот адрес памяти в двоичный файл и добавить его ккод операции для инструкции перехода, смогу ли я получить правильный машинный код для строки:

j loop

или есть другой правильный способ получения целевого адреса для формата команды J-типа?

Кроме того, мой профессор однажды сказал мне, что я могу инициализировать счетчик программы точно равным 0. Итак, я предполагаю, что адрес памяти для "main" будет 0? Есть лиКак я мог сделать это вручную?

Заранее спасибо.

...