x86 RCL / RCR指令的实际应用是什么?

问题描述 投票:5回答:1

我对实际应用感兴趣,即使它们已经过时了现代标准。

有类似的问题,关于ROL和ROR here,但它并没有真正回答有关RCL / RCR的问题。

我可以为RCL提供一些应用程序,RCR与操作数1(即一些LFSR),但我不能想到任何有关非1操作数的合理应用程序。

所以有人可以开导我吗?

附:示例代码非常受欢迎。

更新1:正如Peter Cordes在下面的评论中提到的,一个(非常明显的)应用程序是shrd / shld。 (IIRC rcl / rcr说明已经在8080)

也许上面的'非1'并不清楚,但请注意我对使用最感兴趣,其中操作数是!= 1(RC(L|R) REG, c,其中c> 1或== cl)。

assembly x86 bit-manipulation x86-64 bit-shift
1个回答
4
投票

在移位操作中,这些指令与add-with-carry(adc)或subtract-with-carry(sbb)指令具有相同的作用:

当处理长于CPU寄存器的最大大小的数字时,它用作第二条指令,因此必须使用多个操作处理该数字。

示例:在386 CPU上,您可以使用单条指令执行32位操作。但是,您可能希望处理320位整数。

假设我们有一个4位CPU,我们想对16位整数执行“算术右移”(sar)运算:

Integer: ABCDEFGHIJKLMNOP  (A-P = some bits that may be 1 or 0)

Operation on a 16 bit CPU:

    ABCDEFGHIJKLMNOP (SAR 1) -> AABCDEFGHIJKLMNO, CF = P

Operation on a 4 bit CPU:

    ABCD (SAR 1) -> AABC, CF = D
    EFGH, CF = D (RCR 1) -> DEFG, CF = H
    IJKL, CF = H (RCR 1) -> HIJK, CF = L
    MNOP, CF = L (RCR 1) -> LMNO, CF = P

So the final result on the 4-bit CPU is AABCDEFGHIJKLMNO, CF = P

当然,同样的例子可以在64位CPU上使用256位数字...

还请注意:

使用add/adcsub/sbcshl/rcl,我们从低位开始并继续高位。然而,使用shr/rcrsar/rcr它是相反的方式。

© www.soinside.com 2019 - 2024. All rights reserved.