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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.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 将汇编代码转换为机器代码。这个电脑柜台放什么?_Assembly_Mips - Fatal编程技术网

Assembly 将汇编代码转换为机器代码。这个电脑柜台放什么?

Assembly 将汇编代码转换为机器代码。这个电脑柜台放什么?,assembly,mips,Assembly,Mips,我的任务是: 在本例中,第三行的0/32、22、16、12是什么数字 在上面的例子中,为什么PC=4?我认为它应该等于指令的当前位置=LC 我在某处读到,对于BNE指令,PC计数器的处理方式不同,因此它是一个字地址。那么,对于BNE指令,PC列中会有什么内容呢?我知道4字节=1个字,所以如果BNE在PC=28字节,那么它会是7个字?但是,它需要返回到下一个标签,即8字节=2个单词。。。那么专栏里有什么内容呢?我输入-5是否意味着下一条指令位于第二个单词 编辑 我已经填好了,但我还是被卡住了: 我

我的任务是:

在本例中,第三行的0/32、22、16、12是什么数字

在上面的例子中,为什么PC=4?我认为它应该等于指令的当前位置=LC

我在某处读到,对于BNE指令,PC计数器的处理方式不同,因此它是一个字地址。那么,对于BNE指令,PC列中会有什么内容呢?我知道4字节=1个字,所以如果BNE在PC=28字节,那么它会是7个字?但是,它需要返回到下一个标签,即8字节=2个单词。。。那么专栏里有什么内容呢?我输入-5是否意味着下一条指令位于第二个单词

编辑

我已经填好了,但我还是被卡住了:


我认为他们使用PC列来指示指令执行后的下一个PC值

对于大多数指令,例如算术和逻辑指令,下一个PC是LC+4-这就是顺序执行的工作方式

但是,对于条件分支指令,它要么是下一个PC LC+4,要么是分支目标地址PC+4+立即数*4

对于无条件跳转指令,下一个PC是由标签j label或jal label或寄存器jr$ra中的值计算的地址

对于BNE指令,由于它是一个条件分支,因此抽象地说,下一个PC可能是两个不同值中的一个,因此,我们需要知道状态——寄存器中的值——然后才能选择两个可能的下一个PC值中的一个,因为我们需要知道是否采用了条件分支。如果使用,下一台电脑是PC+4+immediate*4,如果不使用,则只使用PC+4。如果指定的条件为真,即两个寄存器在位模式中不相等,则采用

0/32、22、17、12是:

操作码=0。。。0表示R型指令。操作码字段位于位31-26中。所以,当这些位都是0时,我们有一个R型指令。R型指令有3个寄存器字段位25-21、20-16、15-11、SHMT字段位10-6和FUNC字段位5-0

所有R-Type指令都具有相同的操作码0,它们由FUNC字段区分。ADD指令的FUNC值为32,二进制为100000-您能在ADD指令的二进制扩展中识别此值吗


22、17和12是寄存器号,它们分别对应于友好的汇编程序名$s6、s1和$t4。

标签在该位置的值为LC,因此标签接下来的值/地址为4。但是,如果你明白我的意思,LW后面的PC值是LC=4+4=8,就像ADDI后面的LC=0+4=4一样。很抱歉,在我的回答中,当我说下一台PC时,我并没有以任何方式指代名为next的标签。当我说下一个PC时,我指的是成功或跟随的意义上的下一个PC。有两个例子使用PC列表示指令执行后的PC值:第一个屏幕截图中的ADD指令,其中LC=32和PC=36,第二个屏幕截图中的ADDI指令,其中LC=0和PC=4。因此,我的结论是PC=LC+4是非分支指令的正确答案。还记得所有MIPS指令都有4字节长。BNE指令本身有地址24。因此,BNE将从中计算的PC值是24+4 aka 28,这是PC列的可能值之一:如果它没有分支,则该值为条件分支未执行。现在,当BNE被执行条件分支take时,它将转到下一个位置:地址4,然后是PC列的第二个可能值。如果我们不知道是否进行了分支,那么PC列必然有两个答案:28和4。顺便说一句,很好地计算了BNE中的即时偏移量-6。它需要转到位置4,并从28开始计算,因此您正确地计算了4-28/4=-24/4=-6。