XLAT, XLATB

表格查询翻译

stableVMJITAOTinstruction

编码

操作码指令Op/En64 位兼容/传统说明
D7XLAT m8ZO有效有效设定 AL 到内存字节 DS: [(E)BX + 未签名 AL].
D7XLATBZO有效有效设定 AL 到内存字节 DS: [(E)BX + 未签名 AL].
REX.W + D7XLATBZO有效不可编码设定 AL 为内存字节 [RBX + 未签名 AL].

实测开销

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

说明

在内存中的表格中定位一个字节条目,使用 AL 寄存器的内容作为表格索引,然后将表格条目的内容复制回 AL 寄存器. AL寄存器中的索引作为无符号整数处理. XLAT 和 XLATB 指令从 DS:EBX 或 DS:BX 注册器(取决于指令的地址大小属性,分别为 32 或 16 ) 获得内存中的表基地址. (DS段可能会被覆盖,并带有一段覆盖前缀. )

在组装码级别上,允许此指令的两种形式:"explient-操作数"形式和"nooperand"形式. 显式-操作数形式(与XLAT mnemonic一起指定)允许以符号明确指定表格的基址. 提供这种明确的操作数表格是为了提供文件;然而,请注意,这种表格所提供的文件可能具有误导性。 也就是说,符号不必指定正确的基址. 基址总是由DS:(E)BX登记器指定,在XLAT指令执行前必须正确加载.

No-操作数形式(XLATB)提供了XLAT指令的"短形式". 在此,处理器还假设DS:(E)BX登记册中包含表格的基本地址.

在64位模式中,操作类似于遗留模式或兼容模式. AL用于指定表格索引(操作数大小固定为8位). 然而,RBX被用于指定表格的基址. 参见本节开头的汇总图,用于编码数据和限制.

行动

IF AddressSize = 16
    THEN
          AL := (DS:BX + ZeroExtend(AL));
    ELSE IF (AddressSize = 32)
          AL := (DS:EBX + ZeroExtend(AL)); FI;
    ELSE (AddressSize = 64)
          AL := (RBX + ZeroExtend(AL));

FI;

受影响的旗帜

None.

异常

保护模式
#GP(0)如果 内存操作数 的有效地址位于 CS,DS,ES,FS 或 GS 区段限制之外,如果 DS,ES,FS,或 GS 注册簿中包含 NULL 段选择子.
#SS(0)如果 内存操作数 有效地址在 SS 段限制之外. #PF(fault-code) 如果 页面错误 发生.
#UD如果使用 LOCK 前缀 。
实地址模式
#GP如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外.
#SS如果 内存操作数 的有效地址在 SS 段限制之外。
#UD如果使用 LOCK 前缀 。
虚拟 8086 模式
#GP(0)如果内存操作数的有效地址在CS,DS,ES,FS或GS段限制之外.
#SS(0)如果 内存操作数 有效地址在 SS 段限制之外. #PF(fault-code) 如果 页面错误 发生.
#UD如果使用 LOCK 前缀 。
兼容模式
与保护模式中的例外相同.
64 位模式
#SS(0)如果引用SS部分的内存地址是非冠状的.
#GP(0)如果内存地址是非冠状的. #PF(fault-code) 如果发生 页面错误.
#UD如果使用 LOCK 前缀 。

来源