assembly - x86 RCL/RCR指令的实际应用是什么?
问题描述
我对实际应用很感兴趣,即使按照现代标准来说它们已经过时了。
这里有类似的问题,关于 ROL 和 ROR ,但它并没有真正回答关于 RCL/RCR 的问题。
我可以为 RCL 提出一些应用程序,使用操作数 1 的 RCR(即对于某些 LFSR),但我想不出任何具有非 1 操作数的合理应用程序。
那么任何人都可以启发我吗?
PS示例代码非常受欢迎。
更新 1:正如Peter Cordes
下面评论中提到的,一个(非常明显的)应用程序是 shrd/shld。(IIRC rcl/rcr 指令已经在 8080 中)
也许上面的“非 1”不清楚,但请注意,我最感兴趣的是使用,其中操作数是 != 1 (RC(L|R) REG, c
其中 c 是 > 1 或 == cl
)。
解决方案
在移位运算中,这些指令的作用与加法中的加法进位 ( adc
) 或减法进位 ( sbb
) 指令的作用相同:
当处理大于 CPU 寄存器最大大小的数字时,它用作第二条指令,因此必须使用多个操作来处理该数字。
示例:在 386 CPU 上,您可以使用一条指令执行 32 位操作。但是,您可能希望处理 320 位整数。
sar
假设我们有一个 4 位 CPU,我们想对一个 16 位整数执行“算术右移”( ) 操作:
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/adc
,sub/sbc
或者shl/rcl
我们从低位开始并从高位继续。但是,使用shr/rcr
orsar/rcr
则相反。
推荐阅读
- html - 将鼠标悬停在侧面导航中的 mat-item 上时,工具提示未启动
- python-3.x - 在python中遵循http重定向后如何获取最终url?
- python - 如何用三次样条或 pchip 插值 semilogx 图
- spring-boot - Thymleaf 不渲染结果,而是打印 spring boot app 的控制器方法的返回值
- llvm - 如何获取 LLVM 中的原始源代码和行号?
- android - Android Deep Link 不适用于较低的 API 版本(Android 5.0.2、API 21),但适用于 API 级别 28(Android 9.0)
- python - 神经网络 Librosa 导入错误 Python Tensorflow
- azure-cosmosdb - 如何仅比较 cosmos db 中的日期部分
- javascript - 在 JS 蛇游戏中,不能在画布边框周围骑蛇
- node.js - 如何将 npm 包更新为最新提交?