SPARC 程序集有一个cmp
指令,它比较两个数字(如果我理解正确的话,使用减法)。它也有subcc
, addcc
, andcc
, 和其他。cmp
执行计算后使用和设置条件代码比较两个数字有什么区别?我很难围绕这个概念来思考。
问问题
4636 次
1 回答
2
使用 cmp 比较两个数字和在执行计算后设置条件代码有什么区别?
通常(例如在 x86 或 68000 类型的处理器上),cmp
只设置状态标志,而不修改操作数或将结果存储在任何地方。
sub
等也正在更改目标操作数(它们需要将结果存储在某处),这在进行比较操作时不是必需的。
本质上,cmp
是一种sub
简单地丢弃结果的操作(可能会节省指令周期)。比较时,不需要结果,只需要知道结果是否为零,是否为负。
特别是在 SPARC 上,提供cmp
了一条“综合指令”,以提高可读性,最终由汇编程序转换为subcc
指令。请参阅http://moss.csc.ncsu.edu/~mueller/codeopt/codeopt00/notes/sparc.html上的“综合说明” 。
因此,由汇编程序cmp %reg1,%reg2
转换为。subcc %reg1,%reg2,%g0
这会减去两个寄存器,并通过将结果存储到寄存器中来有效地丢弃结果%g0
。%g0
是一个寄存器,0
读取时总是返回,写入时不会改变。cmp
因此,在指令级别上,和之间根本没有区别subcc
(换句话说,SPARC 没有单独的cmp
指令,而是使用subcc
特殊的目标寄存器进行比较)。
于 2013-03-20T14:49:56.080 回答