assembly - extrwi 是如何工作的?

标签 assembly powerpc opcode

我在翻译以下 PowerPC 指令时遇到困难:

extrwi r12, r10, 8, 16

我一直假设这意味着:

r12 := (r10 << 24) AND 00000000000000000000000011111111

但这似乎不对。 任何人都可以验证这是否正确?谢谢:)

最佳答案

extrwi r12, r10, 8, 16 将提取 r10 起始位 168 位(其中位 0 是最高位(符号位)。

所以对于你的问题,你几乎是对的,除了它是向左旋转 24 而不是左移 24,然后与低 8 位的掩码进行 AND 运算(如 @EOF 提到的) ):

r12 := (r10 <rotate left by> 24) AND 00000000000000000000000011111111

立即提取并右对齐(Word):

参见 PowerPC ISA 第一册,第 14 页。第160页和第160页的解释74: https://www.ibm.com/developerworks/systems/library/es-archguide-v2.html

关于assembly - extrwi 是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29350342/

相关文章:

arm - 解码ARM BL指令

opcode - 未处理的侏儒表情

c++ - 监控操作码

assembly - 什么是 i.h.ah、o.h.ah 和 int86?

c - Windows 上的 gcc 会产生垃圾吗? Windows 与 Linux

python - 使用用户定义或 python 命令序列的 C++ 线程不会在 gdb 异步模式下停止

floating-point - 将 powerpc 移植到 intel 的数字代码使用 float 给出了不同的结果

linux - PowerPC Linux 上的 D(和 Tango)

c++ - gdb 如何读取正在调试的程序/进程的寄存器值?寄存器如何与进程相关联?

linux - 如何简单地获取恰好一条汇编指令的机器码?