首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LC2K ISA.有人能解释一下这个程序在做什么吗?

LC2K ISA.有人能解释一下这个程序在做什么吗?
EN

Stack Overflow用户
提问于 2013-01-19 13:06:45
回答 1查看 6.7K关注 0票数 0

使用LC2K指令集,有人能给我解释一下这个程序是做什么的吗?

代码语言:javascript
复制
        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行上的"start“是什么意思,为什么该行在使用add时会递减reg1?另外,4-5和7-9行是如何工作的?

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

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-01-19 17:33:47

这看起来像是用于学术目的的一个虚构的指令集,但它似乎足够明显:

“symbol”和“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条指令。第二个分支是检查if 0 == 0,这始终是真的,然后跳到符号start,它在汇编时将再次转换为数字值(可能是-2,以返回两条指令到start实际所在的位置)。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14411279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档