c语言中sub是什么指令,汇编 – SUB指令的目的是什么?

在2的补码世界中,可以通过取1的补码(所有位反转)并加1来获得整数的否定.例如,在8位世界中:

A: 0x00000002 ; my number

~A: 0xFFFFFFFD ; 1's complement of my number

-A: 0xFFFFFFFE ; 2's complement of my number (negative A)

要减去A-B,我们肯定可以添加负数A(-B):

NOT B ; invert each bit in the 8-bit value, B

ADD B, 1 ; add 1, giving the 2's complement negated B

ADD A, B

当然,在我添加它之前,我必须修改B(否定它).如果我希望B保持完整怎么办?

PUSH B ; save B

NOT B ; invert each bit in the 8-bit value, B

INC A ; add 1, giving the 2's complement negated B

ADD A, B

POP B ; restore B

要么

NOT B ; invert each bit in the 8-bit value, B

INC A ; add 1, giving the 2's complement negated B

ADD A, B

NOT B ; restore B

这样才行.但是只有SUB指令会不会更容易?

SUB A, B

如果你正在编写汇编语言来做很多算术,你更喜欢哪种方法?而且,在第一种情况下,我使用了INC A指令.我可以在没有INC的情况下离开并且只使用ADD A,但是在许多微处理器上,ADD A,1要求我从指令存储器中取出更多来执行以获得立即的1值.因此,提供INC,因为这种操作是如此常见.

当微处理器设计者确定具有哪种指令集时,他们会考虑最常用的操作类型.减法很常见,因此SUB指令非常方便.因此,它几乎存在于您将找到的任何指令集中.指令集中还有其他指令,其存在的原因不太明显.例如,x86具有XLAT指令,以及所有“字符串”指令,LODS,STOS等.当我可以使用MOV和INC等完成所有工作时,为什么它们存在?因为有人认为这些操作很常见,值得单一指令.

因此,与CPU实现的许多其他指令一样,SUB指令背后的目的是提供更快(执行时间)和更简单的方式来执行最常在软件中执行的操作,并与实际限制如何实现可以实现许多指令.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值