1、 8086CPU的操作码段 一字节操作码 二字节操作码 3: 8086CPU的操作数段 操作数段字节数从 0 字节到 4 字节, 由寻址方式确定 操作数的存在形式 1): 隐含在操作码段 操作数本身 3): 操作数在寄存器中 4): 操作数在存储器中C: 指令中的操作数 无操作数, 指令中虽未显示给出操作数, 但操作数存在 单操作数, 指令中仅有源操作数或者目的操作数出现 双操作数, 指令中有源操作数, 目的操作数出现 二: 8086CPU通用指令格式 计算机中的指令集 复杂指令集 CISC(Complex Instruction Set Computer) 指令比较复杂, 每条指令的字节长度
2、不一致, 指令种类多 以Intel公司为代表的CPU, 例如8086CPU芯片 精简指令集 RISC(Reduced Instruction Set Computer) 指令比较简单, 每条指令的字节长度一致, 指令种类少 以IBM公司为代表的CPU, 例如POWER PC芯片2: 8086CPU指令为可变字节机器码,由1 6 字节机器码组成 A: 一字节操作码指令格式: 特殊性和规律性 B: 二字节操作码通用指令格式: 由80页图3-1定义例: 指令助记符 机器码 字节数 操作数存在形式 DAA 27H(码) 1 隐含在操作码中 PUSH AX 50H(码) 1 隐含在操作码中 MOV AL
3、, 20H B0H(码),20H(数) 2 操作数本身 MOV CX, AX 8BH, C8H(码) 2 操作数在寄存器中 MOV AX, 3000H B8H(码),00H,30H(数) 3 操作数本身ADD AX, BX+2000H 03H,87H(码),00H,20H(数) 4 操作数在存储器中 A: B1字节的定义(基本操作码定义) b2 b7 (OP) 26 = 64种基本的操作码头b1 (D) 寄存器操作数的位置 注: D 值影响 B2 中 REG 的确定 D = 0 寄存器操作数为源操作数 D = 1 寄存器操作数为目的操作数 b0 (W) 操作数的类型 W = 0 字节操作数,
4、8bit W = 1 字操作数, 16bit B2字节的定义(寻址方式定义) b6 b7 (MOD) 寻址方式定义 b7,b6 = 11 寄存器寻址方式 b7,b6 != 11 存贮器寻址方式 b3 b5 (REG) 寄存器名编码b5 b4 b3W = 0 ( 8位寄存器)W = 1 ( 16位寄存器)0 0 0ALAX0 0 1CLCX0 1 0DLDX0 1 1BLBX1 0 0AHSP1 0 1CHBP1 1 0DHSI1 1 1BHDI b0 b2 (R/M) 寄存器名/存贮器寻址方式编码 寄存器名编码同上b2 b1 b0MOD = 00MOD = 01MOD = 10BX+SIBX+
5、SI+D8BX+SI+D16BX+DIBX+DI+D8BX+DI+D16BP+SIBP+SI+D8BP+SI+D16BP+DIBP+DI+D8BP+DI+D16SISI+D8SI+D16DIDI+D8DI+D16未用BP+D8BP+D16 1 1 1BXBX+D8BX+D16 B3 B6字节的定义 (操作数或操作数存放的方式定义) 操作数段的字节数量由操作码功能及操作数位数确定 例: 指令 MOV CX, AX 的机器码为 8BH, C8H, 分析机器码 B1 = 8BH = 10001011B OP = 100010 基本操作码头 D = 1 CX为目的寄存器操作数, CX在B2中的REG
6、编码 W = 1 CX, AX 为字操作数, AX在 B2中的 R/M 编码 B2 = C8H = 11001000B MOD = 11 寄存器寻址方式 REG = 001 目的寄存器操作数 CX 的编码 R/M = 000 源寄存器操作数 AX 的编码 指令 MOV AX, CX 的机器码为 8BH, C1H, D = 1 AX为目的寄存器操作数, AX在B2中为REG编码 W = 1 AX, CX 为字操作数, CX 在 B2中为R/M 编码 B2 = C8H = 11000001B REG = 000 目的寄存器操作数 AX 的编码 R/M = 001 源寄存器操作数 CX 的编码 注:
7、 在寄存器寻址方式(源, 目的操作数均为寄存器), D必为1, 即指向目的寄存器,相同指令形式时, 机器码 B1字节不变, B2字节变 C: 指令ADD AH, BX+20H 的机器码为 02H, 67H,20H, 分析机器码 B1 = 02H = 00000010B OP = 000000 基本操作码头 D = 1 AH为目的寄存器操作数,AH在B2中为REG编码 W = 0 AH为字节操作数, BX+20H在B2中为R/M 编码 B2 = 67H = 01100111B MOD = 01 存储器寻址方式 REG = 100 目的寄存器操作数 AH 的编码 R/M = 111 源存储器操作数
8、 BX+D8 的编码 B3 = 20H 存储器相对寻址中的D8值 D: 指令ADD BX+20H, AH 的机器码为 00H, 67H, 20H, 分析机器码 B1 = 00H = 00000000B D = 0 AH为源寄存器操作数,AH 在 B2中为 REG 编码 W = 0 AH 为字节操作数, BX+20H在B2中为R/M 编码 REG = 100 源寄存器操作数 AH 的编码 R/M = 111 目的存储器操作数 BX+D8 的编码 在存储器寻址方式(源,目的操作数分别为寄存器及存储器), D可变, 并且总是指向寄存器, 相同指令形式时, 机器码 B1字节变, B2字节不变3.2 8
9、086CPU 的寻址方式定义: 确定操作数存在的方式, 称为寻址方式 寄存器寻址方式 定义: 操作数隐含在寄存器中1: 一字节操作码形式 (与图3-1定义无关)指令助记符机器码功 能 PUSH AX50H(码)(AX) SS:SP POP BX5BH(码)(BX) SS: 二字节操作码形式 (遵循图3-1定义)功能MOV AX, BX8BH,C3H(码)(AX) (BX) 16位MOV CL, BH8AH,CFH(码)(CL) (BH) 8位 AX 寄存器名, (AX) 寄存器中的值, 表示存储器注: PUSH AL 错 堆栈操作必须为16位 MOV CL,BX 错 源, 目的操作数数据类型必
10、须一致二: 立即寻址方式 (与图3-1定义无关) 定义: 操作数真实地在操作码后, 既操作数为指令的一部分在代码段中 8位立即数形式 MOV AL, 20H B0H(码), 20H(数) (AL) = 20H 16位立即数形式 MOV AX, 2000H B8H(码), 00H,20H(数) (AX) = 2000H例将立即数 2050H赋给寄存器 AX, BX的指令编程 立即寻址方式 MOV AX, 2050H 3字节机器码MOV BX, 2050H 3字节机器码, 共 6 字节 寄存器寻址方式 MOV BX, AX 2字节机器码, 共 5 字节三: 存储器寻址方式 操作数段为操作数存放的地
11、址值, 而非真实操作数 特点: (1). 寻址方式多样, 灵活, 应用广泛 (2). 需进行地址运算, 相对速度较慢 条件: 指令中仅有一个存储器操作数,可以是源或者目的操作数 形式: 存储器操作数助记符表示为 直接寻址方式 (与图3-1定义无关) 操作数存在于用直接数表示的地址单元中 直接数为隐含段 DS 内的偏移地址 MOV AX, 2000H 实际地址 PA = DS * 16 + 2000H 指令机器码 A1H(码), 00H, 20H(数) 指令的功能 (AX) = 2000H 错 (AX) = 2000H 对 操作数的获得 若在 DS 段中, 偏移地址 2000H 单元中的值为 4
12、5H, 2001H 单元中的值为 30H, 则 (AX) = 3045H 段超越前缀 概念: 从 DS 段外的其它段中寻找操作数 MOV AX, 2000H 省略段符时, 隐含为 DS 段 MOV AX, DS:2000H 给出段符时,确定了操作数的段特性 段超越前缀机器码的定义 0 0 1 b4 b3 1 1 0 b2, b1, b0 = 110, b7, b6, b5 = 001为固定值,b4,b3编码表示段寄存器名b4 b3段寄存器名段超越前缀机器码001 0 0 110 ES 26H001 0 1 110 CS 2EH001 1 0 110 SS 36H001 1 1 110 DS 3EH 段超越前缀机器码出现在操作码的前面 MOV AX, 2000H 机器码: A1H(码), 00H,20H(数)MOV AX, DS:2000H 机器码: 3EH(缀), A1H(码), 0
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1