opcode table表
时间: 2023-12-06 16:44:05 浏览: 357
Opcode(操作码)是计算机指令集中的一种代码,它指示计算机执行特定操作的指令。不同的CPU架构和指令集会有不同的Opcode表,以下是x86指令集的Opcode表:
| Opcode | 指令 | 描述 |
| --- | --- | --- |
| A0 | MOV AL, [BYTE] | 将一个字节的数据从内存中读取到AL寄存器中 |
| A1 | MOV AX, [WORD] | 将一个字的数据从内存中读取到AX寄存器中 |
| A2 | MOV [BYTE], AL | 将AL寄存器中的一个字节的数据写入内存 |
| A3 | MOV [WORD], AX | 将AX寄存器中的一个字的数据写入内存 |
| B0 | MOV AL, [BYTE] | 将一个字节的数据从内存中读取到AL寄存器中 |
| B1 | MOV CL, [BYTE] | 将一个字节的数据从内存中读取到CL寄存器中 |
| B2 | MOV DL, [BYTE] | 将一个字节的数据从内存中读取到DL寄存器中 |
| B3 | MOV BL, [BYTE] | 将一个字节的数据从内存中读取到BL寄存器中 |
| B4 | MOV AH, [BYTE] | 将一个字节的数据从内存中读取到AH寄存器中 |
| B5 | MOV CH, [BYTE] | 将一个字节的数据从内存中读取到CH寄存器中 |
| B6 | MOV DH, [BYTE] | 将一个字节的数据从内存中读取到DH寄存器中 |
| B7 | MOV BH, [BYTE] | 将一个字节的数据从内存中读取到BH寄存器中 |
| B8 | MOV AX, [WORD] | 将一个字的数据从内存中读取到AX寄存器中 |
| B9 | MOV CX, [WORD] | 将一个字的数据从内存中读取到CX寄存器中 |
| BA | MOV DX, [WORD] | 将一个字的数据从内存中读取到DX寄存器中 |
| BB | MOV BX, [WORD] | 将一个字的数据从内存中读取到BX寄存器中 |
| BC | MOV SP, [WORD] | 将一个字的数据从内存中读取到SP寄存器中 |
| BD | MOV BP, [WORD] | 将一个字的数据从内存中读取到BP寄存器中 |
| BE | MOV SI, [WORD] | 将一个字的数据从内存中读取到SI寄存器中 |
| BF | MOV DI, [WORD] | 将一个字的数据从内存中读取到DI寄存器中 |
| C0 | ADD AL, [BYTE] | 将一个字节的数据与AL寄存器中的值相加 |
| C1 | ADD AX, [WORD] | 将一个字的数据与AX寄存器中的值相加 |
| C2 | RET [WORD] | 从子程序中返回,并将堆栈指针恢复到指定的地址 |
| C3 | RET | 从子程序中返回,并将堆栈指针恢复到调用该子程序的地址 |
| C4 | LES | 将一个双字的数据加载到ES寄存器和另一个寄存器中 |
| C5 | LDS | 将一个双字的数据加载到DS寄存器和另一个寄存器中 |
| C6 | MOV [BYTE], [BYTE] | 将一个字节的数据写入内存 |
| C7 | MOV [WORD], [WORD] | 将一个字的数据写入内存 |
| C8 | ENTER | 建立堆栈框架 |
| C9 | LEAVE | 撤销堆栈框架 |
| CA | RETF [WORD] | 从子程序中返回,并将堆栈指针恢复到指定的地址 |
| CB | RETF | 从子程序中返回,并将堆栈指针恢复到调用该子程序的地址 |
| CC | INT 3 | 调试器中断 |
| CD | INT [BYTE] | 产生一个软件中断 |
| CE | INTO | 如果OF标志位为1,则产生一个软件中断 |
| CF | IRET | 从中断处理程序中返回 |
| D0 | SHL [BYTE], 1 | 将一个字节的数据左移1位 |
| D1 | SHL [WORD], 1 | 将一个字的数据左移1位 |
| D2 | SHL [BYTE], CL | 将一个字节的数据左移CL位 |
| D3 | SHL [WORD], CL | 将一个字的数据左移CL位 |
| D4 | AAM | 将AL寄存器中的数值转换为二进制码 |
| D5 | AAD | 将AL寄存器中的二进制码转换为十进制数值 |
| D6 | SALC | 将AL寄存器设置为0或255 |
| D7 | XLAT | 使用AL寄存器的值作为偏移量,从内存中读取一个字节的数据 |
| D8 | FADD [BYTE] | 浮点加法 |
| D9 | FLD [BYTE] | 浮点加载 |
| DA | FIADD [BYTE] | 整型浮点加法 |
| DB | FILD [BYTE] | 整型浮点加载 |
| DC | FADD [WORD] | 浮点加法 |
| DD | FLD [WORD] | 浮点加载 |
| DE | FIADD [WORD] | 整型浮点加法 |
| DF | FILD [WORD] | 整型浮点加载 |
| E0 | LOOPNZ | 如果CX寄存器不为0,则跳转到指定的地址 |
| E1 | LOOPZ | 如果CX寄存器为0,则跳转到指定的地址 |
| E2 | LOOP | 跳转到指定的地址 |
| E3 | JCXZ | 如果CX寄存器为0,则跳转到指定的地址 |
| E4 | IN AL, [BYTE] | 从指定的端口读取一个字节的数据 |
| E5 | IN AX, [BYTE] | 从指定的端口读取一个字的数据 |
| E6 | OUT [BYTE], AL | 向指定的端口写入一个字节的数据 |
| E7 | OUT [BYTE], AX | 向指定的端口写入一个字的数据 |
| E8 | CALL [WORD] | 调用一个子程序 |
| E9 | JMP [WORD] | 无条件跳转到指定的地址 |
| EA | JMPF [WORD] | 跳转到指定的地址 |
| EB | JMP [BYTE] | 跳转到指定的地址 |
| EC | IN AL, DX | 从DX寄存器指定的端口读取一个字节的数据 |
| ED | IN AX, DX | 从DX寄存器指定的端口读取一个字的数据 |
| EE | OUT DX, AL | 向DX寄存器指定的端口写入一个字节的数据 |
| EF | OUT DX, AX | 向DX寄存器指定的端口写入一个字的数据 |
| F0 | LOCK | 在多处理器系统中确保指令串的原子性 |
| F2 | REPNE | 重复执行指令,直到CX寄存器为0或ZF标志位为1 |
| F3 | REP | 重复执行指令,直到CX寄存器为0 |
| F4 | HLT | 暂停CPU执行,直到接收中断或复位 |
| F5 | CMC | 反转CF标志位 |
| F6 | TEST [BYTE], [BYTE] | 测试两个字节的数据 |
| F7 | TEST [WORD], [WORD] | 测试两个字的数据 |
| F8 | CLC | 将CF标志位设置为0 |
| F9 | STC | 将CF标志位设置为1 |
| FA | CLI | 禁止中断 |
| FB | STI | 允许中断 |
| FC | CLD | 清除DF标志位 |
| FD | STD | 设置DF标志位 |
| FE | INC [BYTE] | 增加一个字节的数据 |
| FF | INC [WORD] | 增加一个字的数据 |
阅读全文
相关推荐















