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