Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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_Branch_Mips_Machine Code - Fatal编程技术网

Assembly 在部件/机器代码中的相同分支

Assembly 在部件/机器代码中的相同分支,assembly,branch,mips,machine-code,Assembly,Branch,Mips,Machine Code,使用以下各项的区别是什么: c.eq.s $1, $2 bc1t L2 并使用: beq $1, $2, L2 如果它们做相同的事情,为什么有两种方法来分支?如果它们是不同的,它们的好处是什么 谢谢 编辑:我不知道c.eq.s是特定于协处理器的。为了与第二组代码保持一致,我只写了$1,$2,而不是$f1,$f2。如果数学协处理器条件位1为真,bc1t指令只会分支。如果两个寄存器相等,这里就是这种情况。如果值相等,这相当于简单的分支,使用beq,但前提是两种情况下寄存器实际上是

使用以下各项的区别是什么:

c.eq.s    $1, $2
bc1t      L2
并使用:

beq $1, $2, L2
如果它们做相同的事情,为什么有两种方法来分支?如果它们是不同的,它们的好处是什么

谢谢

编辑:我不知道c.eq.s是特定于协处理器的。为了与第二组代码保持一致,我只写了$1,$2,而不是$f1,$f2。

如果数学协处理器条件位1为真,bc1t指令只会分支。如果两个寄存器相等,这里就是这种情况。如果值相等,这相当于简单的分支,使用beq,但前提是两种情况下寄存器实际上是相同的寄存器

使用MIPS浮点协处理器时,c.eq.s指令中的寄存器应为$f1/$f2,因此这两条指令不相等。我从未见过在浮点指令中使用$1/$2,除了在常规寄存器和协处理器寄存器之间移动数据的指令

我认为浮点条件分支的唯一方法是两步走。IDT MIPS微处理器系列软件参考手册说明:

FP测试和分支指令是分开的。测试说明 比较两个FP值,并相应地在中设置FPA条件位C FP状态寄存器;分支指令根据位是否正确进行分支 设置或取消设置

如果数学协处理器条件位1为真,则bc1t指令仅进行分支。如果两个寄存器相等,这里就是这种情况。如果值相等,这相当于简单的分支,使用beq,但前提是两种情况下寄存器实际上是相同的寄存器

使用MIPS浮点协处理器时,c.eq.s指令中的寄存器应为$f1/$f2,因此这两条指令不相等。我从未见过在浮点指令中使用$1/$2,除了在常规寄存器和协处理器寄存器之间移动数据的指令

我认为浮点条件分支的唯一方法是两步走。IDT MIPS微处理器系列软件参考手册说明:

FP测试和分支指令是分开的。测试说明 比较两个FP值,并相应地在中设置FPA条件位C FP状态寄存器;分支指令根据位是否正确进行分支 设置或取消设置


@神秘的我认为应该是RISC处理器的寄存器或加载存储架构,比如,什么处理器ISA?它显然不是x86。PowerPC?斯巴克?MIPS?臂我只对x86非常熟悉。但是添加适当的标签会带来合适的人来回答这个问题。@Mysticial我认为应该是RISC处理器的寄存器或加载存储架构。我的意思是,什么处理器ISA?它显然不是x86。PowerPC?斯巴克?MIPS?臂我只对x86非常熟悉。但是,添加适当的标签会让合适的人来回答这个问题。bc1t是否只在有协处理器的情况下才起作用?例如,处理双精度浮点数,而beq处理所有事情?@Synia,我不知道如果没有协处理器,bc1t会做什么,它只是检查CPU和copro之间特殊D触发器的值。如果copro不在,我怀疑所有的赌注都输掉了。谢谢你的回答。我只是想再核实一下我是否理解了。你的意思是,对于MIPS微处理器,两步代码是在浮点指令中进行分支的唯一方法吗。它也只适用于浮点指令,而不适用于其他指令?虽然使用beq可以与CPU寄存器一起使用,但不能与浮点协处理器一起使用?@Synia:简单地说,c.eq.s$f1,$f2是浮点协处理器寄存器上的浮点比较,而beq$1,$2是通用寄存器上的整数比较。特别是,浮点比较负责对NAN和INF进行适当的处理。@Synia:注意还有一条c.ueq.s指令,它对NAN的处理不同于c.eq.s。bc1t是否仅在有协处理器的情况下工作?例如,处理双精度浮点数,而beq处理所有事情?@Synia,我不知道如果没有协处理器,bc1t会做什么,它只是检查CPU和copro之间特殊D触发器的值。如果copro不在,我怀疑所有的赌注都输掉了。谢谢你的回答。我只是想再核实一下我是否理解了。你的意思是,对于MIPS微处理器,两步代码是在浮点指令中进行分支的唯一方法吗。它也只适用于浮点指令,而不适用于其他指令?虽然使用beq可以与CPU寄存器一起使用,但不能与浮点协处理器一起使用?@Synia:简单地说,c.eq.s$f1,$f2是浮点协处理器寄存器上的浮点比较,而beq$1,$2是通用寄存器上的整数比较。特别地 ar,浮点比较负责对NAN和INF进行适当的处理。@Synia:注意还有一条c.ueq.s指令,它对NAN的处理与c.eq.s不同。