MIPS中的跳转指令和跳转地址如何工作?

时间:2019-02-22 14:07:31

标签: assembly memory-management compiler-construction mips machine-code

我是一个初学者,试图为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?可以手动做到吗?

谢谢。

0 个答案:

没有答案