计算机微机 原理 8066指令_第1页
计算机微机 原理 8066指令_第2页
计算机微机 原理 8066指令_第3页
计算机微机 原理 8066指令_第4页
计算机微机 原理 8066指令_第5页
已阅读5页,还剩154页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1 第3章 8086指令系统 2 本章内容 3 1基本数据类型3 28086的指令格式3 38086指令的操作数寻址方式3 48086的通用指令总结 3 3 1基本数据类型 字节字双字四字双四字 注意基本数据类型在内存中的字节顺序 4 3 1 1字 双字 四字和双四字的对齐 当数据对齐时 对字来说 地址要被2整除 对双字 四字和双四字来说 地址要被4 8和16整除 应该将数据的地址对齐 以取得较高的存取速度 80X86处理器能够访问任何有效地址的数据类型 而不需要对齐数据 但对于不对齐地址的数据 处理器访问时 需要额外的访问存储器时间 5 3 1 2数字数据类型 1 无符号整数 范围从0到2n 1 其中 n为整数的位数 2 符号整数 用补码表示 范围从 2n 1到2n 1 1 其中 n为整数的位数 6 3 28086的指令格式 标号 助记符 参数1 参数2 注释 各部分之间至少用一个空格作为间隔 带方括号部分表示任选项 助记符 说明计算机要执行哪种操作 用英文单词的缩写表示 参数 指令执行的参与者 即各种操作的对象 参数1是目的操作数 参数2是源操作数 BACK 7 3 38086指令的操作数寻址方式 寻找操作数存放地址的方式称为寻址方式 什么是寻址方式 注意操作数的表达方法 为展开8086指令系统做好准备 8 操作数存放位置 指令中寄存器存储器I O端口 9 传送指令MOV move 的格式 MOVdest src dest srcMOV指令的功能是将源操作数src传送至目的操作数dest 例如 MOVAL 05H AL 05HMOVBX AX BX AXMOVAX SI AX DS SI MOVAX BP 06H AX SS BP 06H MOVAX BX SI AX DS BX SI 10 1 立即数寻址方式 操作数直接存放在指令中 操作数称为立即操作数 MOVCL 5MOVAX 3100H 11 立即寻址注意问题 只能用于源操作数字段 12 2 寄存器寻址方式 操作数存放在寄存器中 指令指定寄存器号 对16位操作数 寄存器可以是AX BX CX DX SI DI SP BP DS CS ES SS等 对8位操作数 寄存器可以是AL AH BL BH CL CH DL和DH等 如 MOVAX BX 13 3 直接寻址方式 有效地址在指令中直接给出默认的段地址在DS段寄存器 可使用段超越前缀改变MOVAX 2000H AX DS 2000H MOVAX ES 2000H AX ES 2000H 表示其中为偏移地址 段超越前缀 即偏移地址 直接寻址 14 AX Accumulator 累加器BX Base 基址寄存器CX Count 计数寄存器DX Data 数据寄存器SI SourceIndex 是源变址寄存器DI DestinationIndex 是目的变址寄存器SP StackPointer 为堆栈指针寄存器BP BasePointer 为基址指针寄存器 通用寄存器的名称与符号 数据寄存器 指针寄存器 15 4 寄存器间接寻址方式 操作数存放在存储器中 而操作数的地址的16位偏移量可在BX BP或SI DI寄存器中 1 选择BX SI DI作为间址寄存器 则操作数在数据段中 所以用DS寄存器的内容作为段地址 操作数的物理地址为 例1MOVAX BX 寄存器间接寻址 16 寄存器间接寻址 续 2 选择BP作为间址寄存器 则操作数在堆栈段中 所以用SS寄存器的内容作为段地址 操作数的物理地址为 物理地址 SS 左移4位 BP 例2MOVAX BP 说明 指令中也可指定段超越前缀来取得其他段中的数据 如 17 MOVAX ES BX 源操作数的物理地址为 ES 左移4位 BX MOVAX DS BP 源操作数的物理地址为 DS 左移4位 BP 18 以下情况不能段超越 程序的指令序列必须安排在代码段程序使用的堆栈一定在堆栈段串操作的目的区必须是附加段 19 5 寄存器相对寻址方式 有效地址是寄存器内容与有符号8位或16位位移量 补码表示 之和 寄存器可以是BX BP或SI DI有效地址 BX BP SI DI 8 16位位移量段地址对应BX SI DI寄存器默认是DS 对应BP寄存器默认是SS 可用段超越前缀改变 20 寄存器相对寻址指令 MOVAX SI 06H AX DS SI 06H MOVAX BP 06H AX SS BP 06H 寄存器相对寻址 21 6 基址加变址寻址方式 有效地址由基址寄存器 BX或BP 的内容加上变址寄存器 SI或DI 的内容构成 有效地址 BX BP SI DI段地址对应BX基址寄存器默认是DS 对应BP基址寄存器默认是SS 可用段超越前缀改变 注意 必须一个是基址寄存器 另一个是变址寄存器 不能两个都是基址寄存器 也不能两个都是变址寄存器 22 基址加变址寻址指令 MOVAX BX SI AX DS BX SI MOVAX BP DI AX SS BP DI MOVAX DS BP DI AX DS BP DI 基址加变址寻址 23 7 相对基址变址寻址方式 有效地址是基址寄存器 BX BP 变址寄存器 SI DI 与一个8位或16位位移量之和 有效地址 BX BP SI DI 8 16位位移量段地址对应BX基址寄存器默认是DS 对应BP基址寄存器默认是SS 可用段超越前缀改变 注意 必须一个是基址寄存器 另一个是变址寄存器 不能两个都是基址寄存器 也不能两个都是变址寄存器 24 相对基址变址寻址指令 MOVAX BX DI 06H AX DS BX DI 06H 相对基址加变址寻址 25 多种表达形式 同一寻址方式可以写成不同的形式 MOVAX BX SI 等同于MOVAX BX SI MOVAX COUNT SI 等同于MOVAX SI COUNT MOVAX WNUM BX SI 等同于MOVAX WNUM BX SI 等同于MOVAX BX SI WNUM 注意 位移量写在 的左边 26 寻址方式总结 1 7种寻址方式归纳为3大类 立即方式 立即数寄存器方式 寄存器操作数存储器方式 直接寻址 寄存器间接寻址 寄存器相对寻址 基址加变址寻址 相对基址加变址寻址 存储器操作数 27 寻址方式总结 2 对于存储器方式 有效地址可以由以下三种成分组成 位移量 Displacement 是存放在指令中的一个8位或16位数 但它不是立即数 而是一个地址 基址 Base 是存放在基址寄存器 BX或BP 中的内容 变址 Index 是存放在变址寄存器 SI或DI 中的内容 有效地址的计算可用下式表示 EA 基址 变址 位移量它们任意组合使用 可得到不同的寻址方式 28 寻址方式总结 3 没有指明时 一般的数据访问在DS段 使用BP访问主存 则在SS段默认的情况允许改变 需要使用段超越前缀指令 8086指令系统中有4个 CS 代码段超越 使用代码段的数据SS 堆栈段超越 使用堆栈段的数据DS 数据段超越 使用数据段的数据ES 附加段超越 使用附加段的数据 BACK 29 3 48086的通用指令 16位8086指令系统是Intel80 x86系列微处理器指令系统的基础 30 学习指令的注意事项 指令的功能 该指令能够实现何种操作 通常指令助记符就是指令功能的英文单词或其缩写形式指令支持的寻址方式 该指令中的操作数可以采用何种寻址方式指令对标志的影响 该指令执行后是否对各个标志位有影响 以及如何影响 参见P425 其他方面 该指令其他需要特别注意的地方 如指令执行时的约定设置 必须预置的参数 隐含使用的寄存器等 31 指令遵循的规则 两个操作数的类型要一致两个操作数不能都是存储器只有MOV PUSH POP指令允许以段寄存器作为操作数目的操作数不能是立即数和CS单操作数指令中的操作数不能是立即数 32 3 4 1数据传送指令 数据传送是计算机中最基本 最重要的一种操作传送指令把数据从一个位置传送到另一个位置只有这种通用传送指令 除了XCHG以外 才是惟一的允许以段寄存器作为操作数的指令 33 1 MOV MOVE 指令 此指令不影响标志位 34 MOV指令举例 moval 4 al 4 字节传送movax bx ax bx 字传送movdx bp dx ss bp 35 2 交换指令XCHG exchange XCHGOPRD1 OPRD2执行操作 OPRD1 OPRD2 数据传送指令不影响标志位 36 XCHG指令数据交换方向 寄存器与寄存器之间对换数据寄存器与存储器之间对换数据不能在存储器与存储器之间对换数据段寄存器不能作为操作数 也可以是8位寄存器 37 xchgax bxxchgah alxchgax 2000h xchgal 2000h XCHG指令举例 XCHGAX DLXCHG BX 0100H 这些都是错误指令 38 3 堆栈操作指令 堆栈是以 后进先出 方式工作的一个存储区 内存区 堆栈操作必须在堆栈段中进行 其段地址由堆栈段寄存器SS确定 它的一端固定 另一端浮动 固定的一端叫栈底 浮动的一端叫栈顶 堆栈只有一个出入口 即当前栈顶 用堆栈指针寄存器SP指定 SP的内容是栈顶的偏移地址 进栈指令和出栈指令都必须根据当前SP的内容来确定进栈或出栈的单元 而且必须及时修改SP的值 使SP的内容指向当前的栈顶 栈顶是地址较小的一端 39 堆栈操作指令 堆栈只有两种基本操作 进栈和出栈 对应两条指令PUSH和POP堆栈操作的单位是字指令不影响标志位 40 入栈指令PUSH Pushwordontothestack 说明 OPRD可以使用除立即数以外的任何一种寻址方式 这是错误指令 PUSH1234H PUSHr16 m16 seg pushaxpush 2000h 41 出栈指令POP Popwordfromthestack 注意 POP指令不允许使用立即数和CS寄存器 POP1234HPOPCS 这些都是错误指令 POPr16 m16 seg popaxpop 2000h 42 PUSH指令举例 例PUSHAX 已知指行指令前 SP 0305H AX 8057H指令的执行过程如下 0305H 80H 57H 0304H 0303H SP 0303H 43 POP指令举例 例POPBX已知执行指令前 SP 0303H BX 1234H指令的执行过程如下 指令执行后 SP 0305H BX 8057H BL BH 44 4 输入输出指令 8086通过输入输出指令与外设进行数据交换 呈现给程序员的外设是端口 Port 即I O地址8086用于寻址外设端口的地址线为16条 端口最多为216 65536 64K 个 端口号为0000H FFFFH每个端口用于传送一个字节的外设数据输入输出指令不影响标志位 45 输入输出寻址方式 8086的端口有64K个 无需分段 设计有两种寻址方式直接寻址 只用于寻址00H FFH前256个端口 操作数i8表示端口号间接寻址 可用于寻址全部64K个端口 DX寄存器的值就是端口号对大于FFH的端口只能采用间接寻址方式 46 1 输入指令IN Input 将外设数据传送给CPU内的AL AX INAL n 字节输入 AL I O端口 n直接寻址 INAL DX 字节输入 AL I O端口 DX间接寻址 INAX n 字输入 AX I O端口 n直接寻址 INAX DX 字输入 AX I O端口 DX间接寻址 n取值00 0FFH 47 直接寻址 字节量输入inal 21hmovah alinal 20h 直接寻址 字量输入inax 20h 间接寻址 字量输入movdx 20hinax dx 两段功能相同字量数据传送实际上实现了连续的两个端口地址的字节量传送 IN指令举例 48 2 输出指令OUT Outout 将CPU内的AL AX数据传送给外设 OUTn AL 字节输出 I O端口 AL n直接寻址 OUTDX AL 字节输出 I O端口 AL DX间接寻址 OUTn AX 字输出 I O端口 AX n直接寻址 OUTDX AX 字输出 I O端口 AX DX间接寻址 49 5 符号 扩展指令 什么是符号扩展 50 符号扩展的概念 符号扩展是指用一个操作数的符号位 即最高位 形成另一个操作数 另一个操作数的各位是全0 正数 或全1 负数 符号扩展不改变数据大小对于数据64H 表示数据100 其最高位D7为0 符号扩展后高8位都是0 成为0064H 仍表示数据100 对于数据ffd2H 表示有符号数 46 其最高位D15为1 符号扩展后高16位都是1 成为ffffffd2H 仍表示有符号数 46 51 符号扩展的实际意义 将数据进行符号扩展是为了产生一个位数加倍 但数值大小不变的结果 以满足有些指令对操作数位数的要求 例如倍长于除数的被除数 再如加 减 乘运算的操作数位数相同 52 CBW convertbytetoword AL的符号扩展至AH 如AL的最高有效位是0 则AH 00 AL的最高有效位为1 则AH FFH AL不变 CWD convertwordtodoubleword AX的符号扩展至DX 如AX的最高有效位是0 则DX 00 AX的最高有效位为1 则DX FFFFH AX不变 符号扩展指令 不影响标志位 53 符号扩展指令举例 对无符号数除法应该采用直接使高8位或高16位清0的方法 获得倍长的被除数 54 3 4 2二进制算术运算指令 8086指令系统提供加 减 乘 除四种基本的算术运算操作 这些操作都可用于字节或字的运算 也都可以用于带符号数与无符号数的运算 若是符号数 则用补码表示 指令运算指令会根据运算结果影响状态标志 使用它们时请留心有关状态标志 55 1 加法指令 ADDADC 56 加法指令ADD Addition ADDr im r mem r r im r memADDmem im r mem mem im r ADD指令将源与目的操作数相加 结果送到目的操作数ADD指令按状态标志的定义相应设置 57 带进位加法指令ADC Addwithcarry ADC指令将源与目的操作数相加 再加上进位CF标志 结果送到目的操作数ADC指令按状态标志的定义相应设置ADC指令主要与ADD配合 实现多精度加法运算 ADCr im r mem r r im r mem CFADCmem im reg mem mem im r CF 58 movax 4652h ax 4652haddax 0f0f0h ax 3742h CF 1movdx 0234h dx 0234hadcdx 0f0f0h dx f325h CF 0 DX AX 02344652H F0F0F0F0H F3253742H ADC指令举例 59 2 减法指令 SUBSBB 60 减法指令SUB subtract SUB指令将目的操作数减去源操作数 结果送到目的操作数SUB指令按照定义相应设置状态标志 SUBr im r mem r r im r memSUBmem im r mem mem im r 61 带借位减法指令SBB subtractwithborrow SBB指令将目的操作数减去源操作数 再减去借位CF 进位 结果送到目的操作数 SBB指令按照定义相应设置状态标志SBB指令主要与SUB配合 实现多精度减法运算 SBBr im r mem r r im r mem CFSBBmem im r mem mem im r CF 62 MULIMUL 3 乘法指令 63 乘法指令 MULr8 mem8 无符号字节乘法 AX AL r8 mem8MULr16 mem16 无符号字乘法 DX AX AX r16 m16 IMULr8 mem8 有符号字节乘法 AX AL r8 m8IMULr16 mem16 有符号字乘法 DX AX AX r16 m16 MUL Multiplication 无符号数乘法指令 IMUL IntegerMultiplication 带符号数乘法指令 64 乘法指令的功能 乘法指令分无符号和有符号乘法指令乘法指令的源操作数显式给出 隐含使用另一个操作数AX和DX字节量相乘 AL与r8 m8相乘 得到16位的结果 存入AX字量相乘 AX与r16 m16相乘 得到32位的结果 其高字存入DX 低字存入AX 65 乘法指令对标志的影响 乘法指令如下影响OF和CF标志 MUL指令 若乘积的高一半 AH或DX 为0 则OF CF 0 否则OF CF 1IMUL指令 若乘积的高一半 AH或DX 是低一半 AL或AX 的符号扩展 则OF CF 0 否则均为1乘法指令对其他状态标志没有定义 对标志没有定义 指令执行后这些标志是任意的 不可预测 就是谁也不知道是0还是1 对标志没有影响 指令执行不改变标志状态 66 乘法运算指令举例 moval 0b4h al b4h 180movbl 11h bl 11h 17mulbl ax Obf4h 3060 OF CF 1 AX高8位不为0moval 0b4h al b4h 76movbl 11h bl 11h 17imulbl ax faf4h 1292 OF CF 1 AX高8位含有效数字 67 4 除法指令 DIVIDIV 68 DIVr8 m8 无符号字节除法 AL AX r8 m8的商 Ah AX r8 m8的余数DIVr16 m16 无符号字除法 AX DX AX r16 m16的商 DX DX AX r16 m16的余数 IDIVr8 m8 有符号字节除法 AL AX r8 m8的商 Ah AX r8 m8的余数IDIVr16 m16 有符号字除法 AX DX AX r16 m16的商 DX DX AX r16 m16的余数 除法指令 DIV Division 无符号数除法指令 IDIV IntegerDivision 带符号数除法指令 69 除法指令的功能 除法指令分无符号和有符号除法指令除法指令的除数显式给出 隐含使用另一个操作数AX和DX作为被除数字节量除法 AX除以r8 m8 8位商存入AL 8位余数存入AH字量除法 DX AX除以r16 m16 16位商存入AX 16位余数存入DX除法指令对标志位没有定义 70 字节操作要求被除数是16位 若不是 则需扩展为字 用CBW指令 字操作要求被除数是32位 若不是 则需扩展为双字 用CWD指令 除法指令的功能 71 5 增量减量指令 1 增量指令INC increment INC指令对操作数加1 增量 INC指令不影响进位CF标志 按定义设置其他状态标志 INCr mem r mem r mem 1 incbx 72 2 减量指令DEC decrement DEC指令对操作数减1 减量 DEC指令不影响进位CF标志 按定义设置其他状态标志 DECr mem r mem r mem 1 73 6 求补指令NEG negative NEG指令对操作数执行求补运算 用零减去操作数 然后结果返回操作数求补运算也可以表达成 将操作数按位取反后加1NEG指令对标志的影响与用零作减法的SUB指令一样 NEGr mem r mem 0 r mem 74 7 比较指令CMP compare CMP指令将目的操作数减去源操作数 按照定义相应设置状态标志CMP指令执行的功能与SUB指令 但结果不回送目的操作数 CMPr im r mem r im r memCMPmem im r mem im r 75 3 4 3十进制算术指令 十进制数在计算机中也要用二进制编码表示 这就是二进制编码的十进制数 BCD码 前述二进制算术运算指令实现了二进制的加减乘除 要实现十进制BCD码的运算 还需要对二进制运算结果进行调整 76 压缩型BCD码 组合BCD码 用4位二进制数表示一个十进制数 整个十进制数形式为一个顺序的以4位为一组的数串 例如 9502D的压缩型BCD码为 1001010100000010B 每4位之间留一空格 即 9502H 77 非压缩型BCD码 非组合BCD码 以8位为一组表示一个十进制数位 8位中的低4位0000B 1001B表示0 9 而高4位为0 例如 9502D的非压缩型BCD码为 00001001000001010000000000000010B 每8位之间留一空格 即 09050002H 78 3 4 4逻辑指令 逻辑运算指令用来对字节或字按位进行逻辑运算 79 逻辑乘 与 指令AND 对两个操作数执行逻辑与运算 结果送到目的操作数 只有相 与 的两位都是1 结果才是1 否则 与 的结果为0 AND指令设置CF OF 0 根据结果设置SF ZF和PF状态 而对AF未定义 80 测试指令TEST 对两个操作数执行逻辑与运算 结果不回送到目的操作数 TEST指令设置CF OF 0 根据结果设置SF ZF和PF状态 而对AF未定义 81 逻辑加 或 指令OR 对两个操作数执行逻辑或运算 结果送到目的操作数 只要相 或 的两位有一位是1 结果就是1 否则 结果为0 OR指令设置CF OF 0 根据结果设置SF ZF和PF状态 而对AF未定义 82 按位加 逻辑异或 指令XOR 对两个操作数执行逻辑异或运算 结果送到目的操作数 只有相 异或 的两位不相同 结果才是1 否则 结果为0 XOR指令设置CF OF 0 根据结果设置SF ZF和PF状态 而对AF未定义 83 求反 逻辑非 指令NOT 对一个操作数执行逻辑非运算 NOTreg mem reg mem reg mem 按位取反 原来是 0 的位变为 1 原来是 1 的位变为 0 NOT指令是一个单操作数指令NOT指令不影响标志位 84 逻辑指令应用 AND指令可用于复位某些位 同0相与 不影响其他位 将BL中D3和D0位清0 其他位不变 andbl 11110110B OR指令可用于置位某些位 同1相或 不影响其他位 将BL中D3和D0位置1 其他位不变 orbl 00001001B XOR指令可用于求反某些位 同1相异或 不影响其他位 将BL中D3和D0位求反 其他不变 xorbl 00001001B 85 3 4 5移位和循环移位指令 1 移位指令 shift 将操作数移动一位或多位 分成逻辑移位和算术移位 分别具有左移或右移操作 86 SHLreg mem 1 CL 逻辑左移 最高位进入CF 最低位补0 SHRreg mem 1 CL 逻辑右移 最低位进入CF 最高位补0 SALreg mem 1 CL 算术左移 最高位进入CF 最低位补0 SARreg mem 1 CL 算术右移 最低位进入CF 最高位不变 SAL与SHL相同 87 移位指令的操作 88 移位指令对标志的影响 按照移入的位设置进位标志CF根据移位后的结果影响SF ZF PF对AF没有定义如果进行一位移动 则按照操作数的最高符号位是否改变 相应设置溢出标志OF 如果移位前的操作数最高位与移位后操作数的最高位不同 有变化 则OF 1 否则OF 0 当移位次数大于1时 OF不确定 89 移位指令的应用 移位实现乘 movsi axshlsi 1 si 2 axaddsi ax si 3 axmovdx bxmovcl 03hshldx cl dx 8 bxsubdx bx dx 7 bxadddx si dx 7 bx 3 ax 逻辑左移n位相当于无符号数乘以2n逻辑右移n位相当于无符号数除以2n 算术左移n位相当于有符号数乘以2n算术右移n位相当于有符号数除以2n 移位指令比乘法指令执行的时间短 90 2 循环移位指令 rotate 将操作数从一端移出的位返回到另一端形成循环 分成不带进位和带进位 分别具有左移或右移操作 ROLreg mem 1 CL 不带进位循环左移 RORreg mem 1 CL 不带进位循环右移 RCLreg mem 1 CL 带进位循环左移 RCRreg mem 1 CL 带进位循环右移 91 循环移位指令的操作 ROL循环左移 ROR循环右移 RCL带进位循环左移 RCR带进位循环右移 92 以下程序段执行后 BX MOVAX 1234HSUBAX 5678HMOVBL 00110110BRCLBL 1 执行SUBAX 5678H后 CF 1 RCL 0110110 0 CF 执行RCLBL 1后 BL 01101101B 1 93 循环移位指令对标志的影响 按照指令功能设置进位标志CF不影响SF ZF PF AF如果进行一位移动 则按照操作数的最高符号位是否改变 相应设置溢出标志OF 如果移位前的操作数最高位与移位后操作数的最高位不同 有变化 则OF 1 否则OF 0 当移位次数大于1时 OF不确定 94 shlax 1rcldx 1 循环移位指令举例 32位数移位 将DX AX中32位数值逻辑左移一位 如何解决AX的最高位移入DX的最低位 95 3 4 6控制转送指令 控制转移类指令用于实现分支 循环 过程等程序结构 控制转移类指令通过改变IP 和CS 值 实现程序执行顺序的改变 96 1 无条件转移指令JMP JUMP 只要执行无条件转移指令JMP 就使程序转到指定的目标地址处 从目标地址处开始执行那里的指令操作数是要转移到的目标地址 目的地址 转移地址 JMP目标地址 程序转向目标地址 97 目标地址的寻址方式 直接寻址方式转移地址直接在指令中 就是直接寻址方式间接寻址方式转移地址在寄存器或主存单元中 就是通过寄存器或存储器的间接寻址方式 用标号表达 用寄存器或存储器操作数表达 98 JMP指令分成4种类型 段内转移 直接寻址 段内转移 间接寻址 段间转移 直接寻址 段间转移 间接寻址 99 段内转移 直接寻址 Codesegment jmpagain 转移到again处继续执行 again deccx 标号again的指令 jmpoutput 转向output output movresult al 标号output的指令 Codeends 格式 JMP Nearptr labe 100 段内转移 间接寻址 JMPr16 m16 IP r16 m16将一个16位寄存器或主存字单元内容送入IP寄存器 作为新的指令指针 但不修改CS寄存器的内容jmpax IP AXjmpwordptr 2000h IP DS 2000h 101 段间转移 直接寻址 JMPfarptrlabel IP label的偏移地址 CS label的段地址将标号所在段的段地址作为新的CS值 标号在该段内的偏移地址作为新的IP值 这样 程序跳转到新的代码段执行 102 Code2segment Otherseg movax bx Code2ends Code1segment jmpfarptrotherseg 远转移到另一代码段的otherseg Code1ends 103 段间转移 间接寻址 JMPdwordptrmem IP mem CS mem 2 用一个双字存储单元表示要跳转的目标地址 这个目标地址存放在主存中连续的两个字单元中的 低位字送IP寄存器 高位字送CS寄存器JMPdwordptr bx IP DS bx CS DS bx 2 104 2 条件转移指令Jcc 指定的条件cc如果成立 程序转移到由标号label指定的目标地址去执行指令 条件不成立 则程序将顺序执行下一条指令 Jcclabel 条件满足 发生转移 条件不满足 顺序执行 根据上一条指令执行后 CPU设置的状态标志位作为测试条件来决定程序是否转移 105 Jcc指令的分类 Jcc指令不影响标志位 但要利用标志位 根据利用的标志位不同 16条指令分成3种情况 1 判断单个标志位状态2 比较无符号数高低3 比较有符号数大小 106 条件转移指令中的条件 107 3 重复控制指令 loop 循环指令默认利用CX计数器 方便实现计数循环的程序结构 LOOPlabel CX CX 1 CX 0 循环到标号label LOOPZ LOOPElabel CX CX 1 CX 0且ZF 1 循环到标号label LOOPNZ LOOPNElabel CX CX 1 CX 0且ZF 0 循环到标号label JCXZlabel CX 0 转移到标号label 108 4 调用 Call 与返回 Return 指令 109 5 过程指令 110 3 4 7串操作类指令 111 串数据类型 串操作指令的操作数是主存中连续存放的数据串 String 即在连续的主存区域中 字节或字的序列串操作指令的操作对象是以字 W 为单位的字串 或是以字节 B 为单位的字节串 112 串寻址方式 源操作数用寄存器SI寻址 默认在数据段DS中 但允许段超越 DS SI 目的操作数用寄存器DI寻址 默认在附加段ES中 不允许段超越 ES DI 每执行一次串操作指令 SI和DI将自动修改 1 对于字节串 或 2 对于字串 执行指令CLD指令后 DF 0 地址指针增1或2执行指令STD指令后 DF 1 地址指针减1或2 113 串传送MOVS movestring 把字节或字操作数从主存的源地址传送至目的地址 MOVSB 字节串传送 ES DI DS SI SI SI 1 DI DI 1 MOVSW 字串传送 ES DI DS SI SI SI 2 DI DI 2 演示 MOVSdest string src string dest string为源串符号地址 src string为目的串符号地址 114 串存储STOS storestring 把AL或AX数据传送至目的地址 STOSB 字节串存储 ES DI AL DI DI 1 STOSW 字串存储 ES DI AX DI DI 2 演示 STOSdest string dest string为目的串符号地址 115 串读取LODS loadstring 把指定主存单元的数据传送给AL或AX LODSB 字节串读取 AL DS SI SI SI 1 LODSW 字串读取 AX DS SI SI SI 2 演示 LODSsrc string src string为源串符号地址 116 串比较CMPS comparestring 将主存中的源操作数减去至目的操作数 以便设置标志 进而比较两操作数之间的关系 CMPSB 字节串比较 DS SI ES DI SI SI 1 DI DI 1 CMPSW 字串比较 DS SI ES DI SI SI 2 DI DI 2 CMPSsrc string dest string src string为源串符号地址 dest string为目的串符号地址 117 串扫描SCAS scanstring 将AL AX减去至目的操作数 以便设置标志 进而比较AL AX与操作数之间的关系 SCASB 字节串扫描 AL ES DI DI DI 1 SCASW 字串扫描 AX ES DI DI DI 2 SCASdest string dest string为目的串符号地址 118 重复前缀指令 repeat 串操作指令执行一次 仅对数据串中的一个字节或字量进行操作 但是串操作指令前 都可以加一个重复前缀 实现串操作的重复执行 重复次数隐含在CX寄存器中重复前缀分2类 3条指令 配合不影响标志的MOVS STOS 和LODS 指令的REP前缀配合影响标志 ZF 的CMPS和SCAS指令的REPE REPZ和REPNE REPNZ前缀 119 REP重复前缀指令 执行的操作 1 如果 CX 0 则退出串操作指令 否则执行以下步骤 2 执行REP后的串操作指令 3 CX CX 1 4 重复步骤 1 3 REP前缀可以理解为 当数据串没有结束 CX 0 则继续传送 注意 先判断CX是否为0 演示 120 执行REPMOVSB MOVSW 之前 应先做好 1 源串首地址 如反向传送则应是末地址 SI 2 目的串首地址 如反向传送则应是末地址末地址 DI 3 串长度 CX 4 建立方向标志 建立方向标志 用以下两条指令 CLD该指令使DF 0 可使SI DI自动增量 STD该指令使DF 1 可使SI DI自动减量 注意 如果是REPSTOSB STOSW 则不用第 1 如果是REPLODSB LODSW 则不用第 2 121 重复串传送 leasi sourceleadi destinationmovcx 100 cx 传送次数cldrepmovsb repmovsbsource destination again movsb movsbsource destination 传送一个字节deccx 传送次数减1jnzagain 判断传送次数cx是否为0 不为0 ZF 0 则转移again位置执行 否则 结束 演示 122 REPE REPZ重复前缀指令 格式 REPE REPZCMPSB CMPSW REPE REPZSCASB SCASW 执行操作 如 CX 0或ZF 0 则退出串操作指令 否则执行以下步骤执行REPE REPZ后的串操作指令 3 CX CX 1 4 重复步骤 1 3 REPE REPZ相等 为零时重复串操作 REPZ REPE前缀可以理解为 当数据串没有结束 CX 0 并且串相等 ZF 1 则继续比较 123 REPNE REPNZ重复前缀指令 格式 REPNE REPNZCMPSB CMPSW REPNE REPNZSCASB SCASW 执行操作 1 如 CX 0或ZF 1 则退出串操作指令 否则执行以下步骤 2 执行REPNE REPNZ后的串操作指令 3 CX CX 1 4 重复 1 3 REPNE REPNZ不相等 不为零时重复串操作 REPNZ REPNE前缀可以理解为 当数据串没有结束 CX 0 并且串不相等 ZF 0 则继续比较 124 执行REPE REPZ REPNE REPNZ CMPSB之前 应先做好 1 源串首地址 如反向传送则应是末地址 SI 2 目的串首地址 如反向传送则应是末地址末地址 DI 3 串长度 CX 4 建立方向标志DF 注意 如果是REPE REPZ REPNE REPNZ SCASB 则不用第 1 125 查找字符串是否有空格 leadi stringmoval 20h 空格的ASCII码 20hmovcx countcldrepnzscasb 搜索jzfound 发现空格 转jmpexit 不含空格 退出found mov di 1 a 将空格换成字符 a exit 126 3 4 8标志控制操作 标志控制指令对在FLAGS寄存器中的标志进行操作 127 进位标志 CF 操作指令

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论