LC2K ISA。有人可以解释这个程序在做什么吗?

时间:2013-01-19 05:06:45

标签: assembly

使用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行将reg2加载为-1? -1来自哪里?

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

如果有人能够简明扼要地解释这个节目,我会非常感激。

谢谢。

1 个答案:

答案 0 :(得分:2)

这看起来像是用于某些学术目的的这些制作指令集之一,但它似乎显而易见:

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

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

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

第3行的

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

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

其余的代码只是循环(beq指令似乎允许比较 - 它检查两个寄存器是否相等,如果它们是,则它分支)。第一个分支是检查reg1 == 0,并使用数字分支目标2,这可能只是跳过2个指令。第二个分支是检查0 == 0,它总是为真,然后跳转到符号start,这个符号在组合时将再次转换为数值(也许-2,返回两个指令到其中start实际上是。)

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