0

使用 LC2K ISA,有人可以向我解释这个程序在做什么吗?

        lw      0       1       five    load reg1 with 5 (symbolic address)
        lw      1       2       3       load reg2 with -1 (numeric address)
start   add     1       2       1       decrement reg1
        beq     0       1       2       goto end of program when reg1==0
        beq     0       0       start   go back to the beginning of the loop
        noop
done    halt                            end of program
five    .fill   5
neg1    .fill   -1
stAddr  .fill   start                   will contain the address of start (2)

符号地址和数字地址有什么区别?例如,为什么第 2 行用 -1 加载 reg2?-1 来自哪里?

第 3 行的“开始”是什么意思,为什么该行在使用 add 时会减少 reg1?另外,第 4-5 行和第 7-9 行是如何工作的?

如果有人能简明扼要地解释该程序,我将不胜感激。

谢谢你。

4

1 回答 1

3

这看起来像是用于某些学术目的的这些编造指令集之一,但它似乎很明显:

'symbolic' 和 'numeric' 之间的区别在于,符号大小写使用符号(名称)来指代某物,而数字大小写使用数字。符号在汇编时被它们的数值替换,因此最终代码没有区别。该符号five指向某些数据,因此在汇编代码时将替换该数据的地址。

(我假设 reg0 是数字 0 的快捷方式,否则寄存器总是包含 0 - 这对于一些真实的架构来说是正确的,并且似乎在这里得到了反映)

看来第二行取第一行加载的寄存器的内容(里面有5,因为就是符号表示的位置存储的数据five),加3,然后在这个新计算的地址加载数据. 3 + 5 = 8,如果我们假设每一行占用内存中的一个位置,从 0 开始编号,那么位置 8 处的数据就是表示为 的行neg1,其中包含 -1。

start第 3 行是另一个符号,它允许程序员从其他地方引用这部分代码。在这种情况下,它显然是一个循环。

该行在添加时递减寄存器-1。(它似乎又引用了寄存器 1、2 和 1 - 所以大概 reg1 既是输入又是输出,而包含 -1 的 reg2 是另一个输入)。

其余代码只是循环(beq 指令似乎允许比较 - 它正在检查两个寄存器是否相等,如果相等,则分支)。第一个分支检查 reg1 == 0,并使用数字分支目标 2,这可能只是向前跳转 2 条指令。第二个分支是检查是否 0 == 0,这总是正确的,然后跳转到符号start,它在汇编时再次变成一个数值(可能是 -2,返回两条指令到start实际位置)。

最后三行只是声明了程序使用的一些数据(实际上最后一行似乎是多余的,但我不知道这个虚构的架构)。

于 2013-01-19T09:33:47.053 回答