ipx666在线观看:开启你的视界新维度

核心内容摘要

肌肤之亲:触碰生命的温暖与力量
91吃瓜黑料

少司缘都打开了,姬小满你怎么还不?——一场跨越时空的爱恋,一段等待千年的绝美之约

A.1 使用操作码表Using Opcode Tables本附录中的表格列出了各条指令的操作码包括必须的指令前缀以及由 ModR/M 字节提供的操作码扩展。

表格中的空白单元表示该操作码是保留的reserved或未定义的undefined。

操作码映射表是按照操作码字节高 4 位和低 4 位的十六进制值来组织的。

1 字节操作码编码表 A-2使用操作码的高 4 位作为行索引低 4 位作为列索引在操作码表中查找对应指令。

以0FH开头的 2 字节操作码表 A-3跳过所有指令前缀以及0FH字节0FH之前可能带有66H、F2H或F3H前缀然后使用下一个操作码字节的高 4 位和低 4 位分别作为行和列索引。

以0F38H或0F3AH开头的 3 字节操作码表 A-4跳过所有指令前缀以及0F38H或0F3AH再使用第三个操作码字节的高 4 位和低 4 位来索引表中的行和列。

关于一字节、两字节和三字节操作码的查表示例请参见A.

4 节《一字节、两字节和三字节操作码的查找示例》。

当ModR/M 字节提供操作码扩展时该信息会对操作码的执行进行限定。

有关 ModR/M 字节中的操作码扩展如何修改表 A-2 和表 A-3 中的操作码映射请参见A.4 节。

用于浮点指令的转义ESC操作码表在每一页的顶部标识了操作码的高 8 位。

请参见A.5 节。

如果随附的 ModR/M 字节位于00H–BFH范围内则由ModR/M 的reg 位以及位 3–5每页第三张表的顶行共同决定具体操作码。

如果 ModR/M 字节超出00H–BFH的范围则由该节中每页底部的两张表进行映射。

A.2 缩写说明Key to Abbreviations操作数使用一种Zz形式的两字符代码进行标识第一个字符大写字母表示寻址方式addressing method第二个字符小写字母表示操作数类型operand typeA.

1 寻址方式代码Codes for Addressing Method下列缩写用于描述指令操作数的寻址方式addressing method代码含义说明A直接地址指令中没有 ModR/M 字节操作数地址直接编码在指令中。

不能使用基址寄存器、变址寄存器或比例因子例如远跳转JMP (EA)。

CModR/M 字节中的reg 字段选择一个控制寄存器例如MOV (0F20, 0F

DModR/M 字节中的reg 字段选择一个调试寄存器例如MOV (0F21, 0F

E操作码后跟一个ModR/M 字节用于指定操作数。

操作数可以是通用寄存器或内存地址。

若为内存地址则由段寄存器以及以下元素计算得出基址寄存器、变址寄存器、比例因子、位移。

FEFLAGS / RFLAGS 寄存器。

GModR/M 字节中的reg 字段选择一个通用寄存器例如AX (

HVEX 前缀中的VEX.vvvv 字段选择一个128 位 XMM或256 位 YMM 寄存器由操作数类型决定。

在传统 SSE 编码中该操作数不存在此时指令会变为破坏式destructive形式。

I立即数操作数的值直接编码在指令的后续字节中。

J指令中包含一个相对偏移量该偏移量会加到指令指针寄存器中例如JMP (E

、LOOP。

L8 位立即数的高 4 位选择一个128 位 XMM或256 位 YMM 寄存器由操作数类型决定。

在32 位模式下最高位被忽略。

MModR/M 字节只能引用内存操作数例如BOUND、LES、LDS、LSS、LFS、LGS、CMPXCHG8B。

NModR/M 字节中的R/M 字段选择一个MMX 技术的 packed-quadword 寄存器。

O指令中没有 ModR/M 字节。

操作数的偏移量以word 或 double word取决于地址大小属性的形式直接编码在指令中。

不能使用基址寄存器、变址寄存器或比例因子例如MOV (A0–A

PModR/M 字节中的reg 字段选择一个MMX 技术的 packed-quadword 寄存器。

Q操作码后跟一个ModR/M 字节用于指定操作数。

操作数可以是MMX 寄存器或内存地址。

若为内存地址则由段寄存器以及基址寄存器、变址寄存器、比例因子和位移共同计算。

RModR/M 字节中的R/M 字段只能引用通用寄存器例如MOV (0F20–0F

SModR/M 字节中的reg 字段选择一个段寄存器例如MOV (8C, 8E)。

UModR/M 字节中的R/M 字段选择一个128 位 XMM或256 位 YMM 寄存器由操作数类型决定。

VModR/M 字节中的reg 字段选择一个128 位 XMM或256 位 YMM 寄存器由操作数类型决定。

W操作码后跟一个ModR/M 字节用于指定操作数。

操作数可以是128 位 XMM 寄存器、256 位 YMM 寄存器由操作数类型决定或内存地址。

若为内存地址则由段寄存器、基址寄存器、变址寄存器、比例因子和位移共同计算。

X由DS:rSI寄存器对寻址的内存例如MOVS、CMPS、OUTS、LODS。

Y由ES:rDI寄存器对寻址的内存例如MOVS、CMPS、INS、STOS、SCAS。

A.

2 操作数类型代码Codes for Operand Type下列缩写用于描述指令操作数的类型operand type代码含义说明a两个内存操作数根据操作数大小属性operand-size attribute表示两个word内存操作数或两个doubleword内存操作数仅用于BOUND指令。

b字节byte与操作数大小属性无关。

c字节或字byte / word取决于操作数大小属性。

d双字doubleword与操作数大小属性无关。

dq双四字double-quadword与操作数大小属性无关。

p指针类型32 位、48 位或 80 位指针取决于操作数大小属性。

pd128 位或 256 位打包的双精度浮点数据packed double-precision floating-point。

pi四字quadwordMMX 技术寄存器例如mm0。

ps128 位或 256 位打包的单精度浮点数据packed single-precision floating-point。

q四字quadword与操作数大小属性无关。

qq双四字Quad-Quadword256 位与操作数大小属性无关。

s伪描述符pseudo-descriptor长度为6 字节或 10 字节。

sd128 位双精度浮点向量中的标量元素scalar double-precision。

ss128 位单精度浮点向量中的标量元素scalar single-precision。

si双字整数寄存器例如eax。

v字 / 双字 / 四字64 位模式取决于操作数大小属性。

w字word与操作数大小属性无关。

x根据操作数大小属性表示dq或qq。

y双字 / 四字64 位模式取决于操作数大小属性。

z当操作数大小为16 位时表示word当操作数大小为32 位或 64 位时表示doubleword。

A.

3 寄存器代码Register Codes当某条指令要求使用特定寄存器作为操作数时寄存器会直接以名称标识例如AX、CL、ESI。

寄存器名称本身就表明了该寄存器的位宽是64 位、32 位、16 位还是 8 位。

当寄存器的位宽**取决于操作数大小属性operand-size attribute**时会使用eXX或rXX形式的寄存器标识符eXX用于16 位或 32 位两种可能的情况rXX用于16 位、32 位或 64 位三种可能的情况例如eAX操作数大小为 16 位 → 使用AX操作数大小为 32 位 → 使用EAXrAX可能表示AX、EAX或RAX取决于操作数大小属性当使用REX.B 位来修改操作码中reg 字段所指定的寄存器时会在寄存器名称后面加上“/x”以表示存在额外的寄存器可能性。

例如rCX/r9表示该寄存器既可能是rCX也可能是r9。

需要注意的是在这种情况下r9的位宽同样由操作数大小属性决定其规则与rCX完全一致。

A.

4 一字节、两字节和三字节操作码的查找示例Opcode Look-up Examples for One, Two, and Three-Byte Opcodes本节通过示例说明如何使用操作码映射表来查找指令操作码。

A.

2.

1 一字节操作码指令One-Byte Opcode Instructions一字节操作码的操作码映射表见表 A-2。

该表按照以下方式组织行row操作码十六进制值的低 4 位列column操作码十六进制值的高 4 位操作码表中的每一个表项属于以下两种类型之一使用A.2 节中定义的记号表示的指令助记符及其操作数类型用作**指令前缀instruction prefix**的操作码一字节操作码后续字节的解释规则对于操作码映射表中对应具体指令的表项主操作码后续字节的解释规则属于以下几种情况之一需要 ModR/M 字节ModR/M 字节按照A.1 节以及《Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2A》第 2 章Instruction Format中定义的规则进行解释。

操作数类型使用A.2 节中定义的记号。

需要 ModR/M 字节且 reg 字段作为操作码扩展此时 ModR/M 字节中的reg/opcode 字段用于区分具体指令。

解释该 ModR/M 字节时应使用表 A-6。

ModR/M 字节的使用是保留或未定义的该情况适用于表示指令前缀的表项不带操作数、且不使用 ModR/M 的指令例如60H→PUSHA06H→PUSH ES示例 A-1一字节操作码的查找示例Look-up Example for 1-Byte Opcodes给定操作码030500000000这是一个ADD指令其解释过程如下使用表 A-2定位操作码操作码的第一个十六进制数字0→ 表示表中的行第二个十六进制数字3→ 表示表中的列由此定位到一个ADD 指令两个操作数。

解析操作数类型第一个操作数类型为Gv→ 表示一个通用寄存器其大小为word 或 doubleword取决于操作数大小属性。

第二个操作数类型为Ev→ 表示后面跟随一个ModR/M 字节该字节指定操作数是一个 word / doubleword 通用寄存器或一个内存操作数。

解析 ModR/M 字节ModR/M 字节为05H→ 表示后面跟随一个32 位位移量00000000H。

ModR/M 字节中的 **reg/opcode 字段位 3–5**为000→ 指定寄存器为EAX。

最终该操作码对应的指令为ADD EAX,mem_op其中内存操作数mem_op的偏移量为00000000H说明Group 指令部分一字节和两字节操作码在操作码表中指向一个组号Group Number在操作码映射表中以阴影单元格表示。

组号表示该指令使用ModR/M 字节中的 reg/opcode 位作为操作码扩展用于区分同一主操作码下的不同指令。

有关详细说明请参见A.4 节。

A.

2.

2 两字节操作码指令Two-Byte Opcode Instructions表A-3给出了两字节操作码映射表该表中包含的主操作码可能是2 字节长度或3 字节长度两字节长度的操作码长度为2 字节的主操作码以转义操作码0FH开头。

使用第二个操作码字节的高 4 位 → 表示表中的列低 4 位 → 表示表中的行由此在表A-3中定位对应的指令。

三字节长度使用 0FH的操作码某些被归类在两字节 opcode 表中的操作码实际上是3 字节长度其形式为[mandatory prefix]0FHopcode其中 mandatory prefix 可能是66HF2HF3H此时使用第三个字节的高 4 位和低 4 位在表A-3中索引行和列⚠️ 例外情况如果第二个操作码字节是38H或3AH则该指令属于三字节 opcode 转义指令应参见A.

2.

3。

两字节操作码后续字节的解释规则对于操作码映射表中的每一个表项主操作码之后的字节解释规则属于以下情况之一需要 ModR/M 字节ModR/M 字节按照A.1 节以及《Intel® 64 and IA-32 Architectures Software Developer’s Manual, Volume 2A》第 2 章Instruction Format的规则进行解析。

操作数类型使用A.2 节中的记号。

需要 ModR/M 字节且 reg 字段作为操作码扩展此时 ModR/M 字节中的reg/opcode 字段用于区分具体指令解释应参考表 A-6。

ModR/M 字节的使用是保留或未定义的该情况适用于使用 ModR/M 编码、但没有操作数的指令例如0F77H→EMMS示例 A-2两字节操作码查找示例Look-up Example for 2-Byte Opcodes给定操作码0FA4050000000003使用表A-3对SHLD指令进行查找与解析定位操作码行A列4表明该指令是SHLD操作数类型为Ev, Gv, Ib。

解析操作数EvModR/M 字节指定的 word 或 doubleword 操作数GvModR/M 字节中的 reg 字段指定一个通用寄存器Ib紧随其后的一个立即数字节解析 ModR/M 字节ModR/M 05Hmod与r/m表示使用32 位位移来定位第一个内存操作数reg字段指定第二个操作数为EAX解析后续字节接下来的00000000H目的操作数的 32 位内存位移最后一个字节03H移位次数的立即数最终该操作码表示的指令为SHLD DS:00000000H,EAX,3A.

2.

3 三字节操作码指令Three-Byte Opcode Instructions表A-4与表 A-5给出了三字节操作码映射表。

这些表中包含的主操作码可能是3 字节长度4 字节长度三字节长度的操作码长度为3 字节的主操作码以以下双转义字节开头之一0F38H0F3AH此时使用第三个操作码字节的高 4 位和低 4 位在表A-4或A-5中索引行和列四字节长度的操作码长度为4 字节的主操作码形式为[mandatory prefix]0F38H/0F3AHopcode其中 mandatory prefix 可以是66HF2HF3H此时使用第四个字节的高 4 位和低 4 位在表A-4或A-5中索引行和列三字节操作码后续字节的解释规则对于操作码映射表中的每一个表项必须存在 ModR/M 字节ModR/M 的解释规则与A.1 节以及Volume 2A 的Instruction Format完全一致操作数类型仍然使用A.2 节中的记号示例 A-3三字节操作码查找示例Look-up Example for 3-Byte Opcodes给定操作码660F3A0FC108使用表A-5解析PALIGNR指令前缀与表选择66H操作数大小前缀0F 3A表示使用表 A-5定位操作码行0列F表明该指令为PALIGNR操作数类型为Vdq, Wdq, Ib。

解析操作数VdqModR/M 的 reg 字段选择一个128 位 XMM 寄存器WdqModR/M 的 R/M 字段选择一个128 位 XMM 寄存器或内存操作数Ib紧随其后的立即数字节解析 ModR/M 字节ModR/M C1Hreg→ 指定第一个操作数为XMM0modr/m→ 指定第二个操作数为XMM1解析立即数最后一个字节08H立即数最终该操作码表示的指令为PALIGNR XMM0,XMM1,8A.

2.

4 VEX 前缀指令VEX Prefix Instructions包含VEX 前缀的指令是在两字节和三字节操作码映射表的基础上进行组织的其对应关系由VEX.mmmmm 字段所隐含的转义操作码决定mmmm 00001→ 隐含0Fmmmm 00010→ 隐含0F38Hmmmm 00011→ 隐含0F3AH因此VEX 编码指令在 opcode 表中的定位方式与非 VEX 编码指令是类似的每个表项仍然基于 opcode 字节的值进行索引。

VEX 前缀的功能位VEX 前缀包含多个比特字段用于编码以下信息隐含的前缀功能VEX.pp对应传统前缀66H、F2H、F3H操作数大小 / opcode 相关信息VEX.L用于区分128 位与256 位向量操作有关 VEX 前缀各字段的详细说明请参见第 4 章。

VEX / 非 VEX 指令在 opcode 表中的表示方式操作码表A-2 到 A-6中同时包含带 VEX 前缀的指令不带 VEX 前缀的指令许多表项只列出一次但实际上同时代表VEX 形式非 VEX 形式其区分规则如下存在 VEX 前缀时所有操作数均有效指令助记符通常以前缀v开头例如VMOVUPD不存在 VEX 前缀时VEX.vvvv 操作数不可用指令助记符中的v前缀被省略例如MOVUPD仅存在于 VEX 形式的指令有少量指令只存在 VEX 编码形式这些指令在操作码表中会用上标 “v”进行标记。

VEX 指令的操作数大小判定VEX 前缀指令的操作数大小可通过操作数类型代码operand type code来判断dq→ 128 位向量qq→ 256 位向量x→ 支持 128 位或 256 位具体大小由VEX.L 位决定例如VMOVUPD Vx,Wx表示当VEX.L 0→ 使用128 位当VEX.L 1→ 使用256 位两种形式均被该指令支持。

A.

5 操作码表中使用的上标说明Superscripts Utilized in Opcode Tables表A-1给出了针对某些特殊编码情况的说明。

这些说明在后续的操作码映射表中通过**上标superscript**进行标注。

在操作码表中灰色单元格表示指令分组instruction groupings。

表 A-1操作码表中使用的上标含义上标符号含义说明1AModR/M 字节的第

5、

3 位即reg/opcode字段用作操作码扩展。

参见A.4 节《一字节与两字节操作码的操作码扩展》。

1B当需要刻意触发非法操作码异常#UD时应使用0F 0BUD2指令或0F B9H操作码。

1C某些指令共用同一个两字节操作码。

当指令存在变体或同一操作码对应多条不同指令时需通过ModR/M 字节来区分具体指令。

有关用于区分指令的 ModR/M 取值请参见表 A-6。

i64该指令在64 位模式下非法或不可编码。

注意40H–4FH单字节INC/DEC在 64 位模式下会被解释为REX 前缀组合。

在 64 位模式下应使用FE / FFGroup 4 和 Group 5来实现INC/DEC。

o64该指令仅在 64 位模式下可用。

d64在64 位模式下该指令默认使用 64 位操作数大小且无法编码为 32 位操作数大小。

f64在64 位模式下该指令的操作数大小被强制为 64 位。

任何试图改变操作数大小的前缀在 64 位模式下都会被忽略。

v该指令仅存在 VEX 形式不存在传统的 SSElegacy SSE形式。

v1该指令仅存在 VEX128 与 SSE 形式不存在 VEX256 形式。

当无法仅通过数据大小推断这一点时会使用该上标进行说明。

A.3 一字节、两字节和三字节操作码映射表ONE, TWO, AND THREE-BYTE OPCODE MAPS一字节、两字节以及三字节操作码的映射表见下文中的表 A-2 至 表 A-5。

这些操作码表采用多页形式进行展示。

为了方便查找在逻辑上具有连续关系的行与列会被安排在相对的页面上以减少查表时的翻页成本。

需要注意的是各个表格页面中不会重复显示表注footnotes每一张表对应的完整表注统一放置在该表的最后一页因此在查阅操作码映射表时如果遇到上标、分组说明或特殊限制条件应当查看该表最后一页的表注说明。

Table A-2注释NOTES所有操作码映射表中的空白单元均为保留项reserved不得使用。

不要依赖任何**未定义undefined或保留reserved**位置的行为。

Table A-3注释NOTES所有操作码映射表中的空白项均为保留reserved不得使用。

不要依赖任何**未定义undefined或保留reserved**位置的行为。

Table A-4注释NOTES所有操作码映射表中的空白项均为保留reserved不得使用。

不要依赖任何**未定义undefined或保留reserved**位置的行为。

Table A-5注释NOTES所有操作码映射表中的空白项均为保留reserved不得使用。

不要依赖任何**未定义undefined或保留reserved**位置的行为。

人or猪or狗的Dna播放-人or猪or狗的Dna播放应用

百度百家号客服电话人工服务

123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123 123