Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly LC2K ISA。有人能解释一下这个程序在做什么吗?_Assembly - Fatal编程技术网

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

Assembly LC2K ISA。有人能解释一下这个程序在做什么吗?,assembly,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

使用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行的“start”是什么意思?为什么在使用add时,该行递减reg1?另外,4-5号线和7-9号线的工作情况如何

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


谢谢。

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

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

(我假设reg0是数字0的快捷方式,或者register总是包含0-这在一些真实的体系结构中是正确的,这里似乎也反映了这一点)

第二行似乎取第一行中加载的寄存器的内容(其中包含5,因为这是存储在符号
5
指示的位置的数据),加上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
实际所在的位置)


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

真正的问题是,如果你没有在课程中解释代码,那么为什么要从虚构的架构中看代码……正确,除了beq是相对于下一条指令的,所以第二条beq将被组装成-3,而不是-2。顺便说一下,beq只前进1。