繁体   English   中英

cmp和subcc /其他组装

[英]cmp and subcc/others in assembly

SPARC程序集具有cmp指令,该指令将两个数字进行比较(如果我理解正确,请使用减法)。 它也有subccaddccandcc ,等等。 计算后使用cmp比较两个数字与设置条件代码之间有什么区别? 我在围绕这个概念整理思路时遇到了麻烦。

计算后使用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被汇编程序转换为subcc %reg1,%reg2,%g0 这将两个寄存器相减,并通过将结果存储到寄存器%g0有效地丢弃结果。 %g0是一个寄存器,在读取时始终返回0 ,而在写入时不改变。 因此,在指令级别上, cmpsubcc之间根本没有区别(换句话说,SPARC没有单独的cmp指令,而是使用带有特殊目标寄存器的subcc进行比较)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM