IA-32和Intel 64架构目标代码操作码详解与翻译

需积分: 10 2 下载量 48 浏览量 更新于2024-07-28 收藏 1.35MB DOC 举报
本资源主要关注的是基于IA-32和Intel 64架构的目标代码翻译指南。IA-32和Intel 64是英特尔公司开发的两种不同的处理器架构,IA-32代表32位的Intel Architecture,Intel 64则是64位的扩展。在编写针对这两种架构的程序时,理解其特定的操作码体系至关重要。 附录A提供了详细的操作码表,用于指导程序员如何将源代码转换为目标代码。操作码被分类为两类: 1. 整数、系统、MMX、SSE/SSE2/SSE3/SSSE3以及VMX指令:这些是一字节、二字节和三字节的指令,用于执行各种算术和逻辑运算。它们分别在表A-2到A-6中列出,包括单字节、双字节和可能带有前缀的指令。 2. 浮点操作的转义操作码指令:这些指令采用转义字符加上操作码和ModR/M字节的格式,存在于表A-7至A-22。浮点操作码通常通过每页的高位来定位,具体取决于页面的布局。 在使用这些表时,需要注意以下几点: - 表格中的空白区域表示保留位,不得使用。开发者不应依赖未定义的操作码。 - 操作码以十六进制形式表示,高位4位代表一个操作码字节。单字节指令(A-2)通过行和列的低4位索引来查找。双字节指令(A-3)则忽略前缀,通过0Fh字节和下一个字节的高位来定位。同样,三字节指令(A-4)通过0F38h或0F3Ah加上第三字节的高位来查找。 - ModR/M字节中的操作码扩展对指令的具体功能有影响,需参考A.4节来理解。 - 缩写如Zz用于表示操作数,其中第一个字母表示寻址方式,第二个字母表示操作数类型。例如,A表示直接寻址,C用于ModR/M寄存器位。 此外,对于某些ModR/M字节的编码,如果在00h-BFh范围内,操作码由页的第三表格顶部的三位和ModR/M中的REG位决定。而对于00h-BFh范围之外的操作码,需要参考页的底部表格。 为了正确处理操作码,A.2.4节提供了单字节、双字节和三字节操作码查找的示例。理解和遵循这些规则将有助于程序员在不同架构上编写高效且兼容的代码。 本资源提供了实现跨IA-32和Intel 64架构代码互译的关键信息,是硬件开发者和优化工程师必备的技术参考资料。