BSWAP

字节交换

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
0F C8+rdBSWAP r32Ovalid*有效反转32位寄存器的字节顺序。
REX.W + 0F C8+rdBSWAP r64O有效不可编码反转一个64位寄存器的字节顺序。

操作数编码

每个模式对应上表 Op/En 列的一个取值,说明各操作数按书写顺序分别编码在指令的哪个字段,以及指令对它是读、是写还是两者兼有。

O

  1. opcode.reg lectura y escritura操作码字节自身的低三位

实测开销

正在从 arch-data 加载实测数据...

说明

反转32位或64位(指定)寄存器的字节顺序。 本指令用于将小endian值转换为大endian格式,反之亦然. 要在单词值(16位寄存器)中互换字节,请使用 XCHG 指令. BSWAP指令引用16位寄存器时,结果未定义.

在64位模式下,指令的默认操作大小为32位. 使用REX的前缀形式为REX.B,允许访问额外的注册(R8-R15). 使用REX前缀,形式为REX.W,促进运行到64位. 参见本节开头的汇总图,用于编码数据和限制.

IA-32 架构兼容性

BSWAP指令在IA-32处理器上不支持早于Intel486TM处理器家族. 对于与本指令的兼容性,软件应当包括功能等同的代码,用于比Intel486处理器家族更早在英特尔处理器上执行.

行动

TEMP := DEST
IF 64-bit mode AND OperandSize = 64

    THEN
          DEST[7:0] := TEMP[63:56];
          DEST[15:8] := TEMP[55:48];
          DEST[23:16] := TEMP[47:40];
          DEST[31:24] := TEMP[39:32];
          DEST[39:32] := TEMP[31:24];
          DEST[47:40] := TEMP[23:16];
          DEST[55:48] := TEMP[15:8];
          DEST[63:56] := TEMP[7:0];

    ELSE
          DEST[7:0] := TEMP[31:24];
          DEST[15:8] := TEMP[23:16];
          DEST[23:16] := TEMP[15:8];
          DEST[31:24] := TEMP[7:0];

FI;

受影响的旗帜

None.

异常

实地址模式
#UD如果使用 LOCK 前缀 。
保护模式
#UD如果使用 LOCK 前缀 。
虚拟 8086 模式
#UD如果使用 LOCK 前缀 。
兼容模式
#UD如果使用 LOCK 前缀 。
64 位模式
#UD如果使用 LOCK 前缀 。

来源