已阅读5页,还剩166页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章16位 32位微处理器指令系统 指令 要求计算机执行各种特定操作的命令 指令系统 微机能够识别和执行的全部指令集合 不同的微处理器所对应的指令系统也不相同 本章内容 指令的基本格式8086 8088的寻址方式8086 8088的指令系统80386的寻址方式和指令系统Pentium新增加的指令 1 3 1指令的基本格式 本节内容 指令的构成8086 8088的指令格式 2 3 1 1指令的构成 包括两部分 操作码 表示操作性质或类型编码操作数 操作对象 一般来说 第一字节表示操作码 第二字节表示寻址方式 第三 四字节表示操作数在内存的位移量或者是立即数 在指令中没有位移量时 第五 六字节表示立即数 3 3 1 28086 8088的指令格式 基本格式 标号 操作码助记符目的操作数 源操作数 注释 标号 为该条指令所在内存单元的符号地址 后面要跟冒号 标号一般由字母开头 后跟字母 数字或特殊字符 不允许使用保留字 操作码助记符 指示CPU执行什么样的操作 操作数 分目的操作数和源操作数两种 目的操作数是指令结果存放的位置 源操作数是指令操作的对象 注释 说明本条指令或一段程序的功能 使程序可读性强 汇编程序对其不进行处理 4 3 28086 8088的寻址方式 一条汇编语言指令 有两个问题需要关注 该条指令将进行什么操作操作的对象和操作后结果的存放位置 操作数的寻址方式就是指寻找操作数位置的方式 本节内容 立即寻址寄存器寻址直接寻址寄存器间接寻址基址寻址和变址寻址基址变址寻址固定寻址 5 1 立即寻址 操作数包含在指令中 这种操作数称为立即数可以是8位数值 00H FFH 也可以是16位数值 0000H FFFFH MOVAL 80H 将80H送入ALMOVAX 306AH 将306AH送入AX立即数寻址方式常用来给寄存器和存储单元赋值 操作数直接在指令中取得 不需要使用另外的总线周期 执行时间短 速度快 6 2 寄存器寻址 操作数在CPU的内部寄存器中 8位寄存器 AH AL BH BL CH CL DH DL16位寄存器 AX BX CX DX SI DI BP SP4个段寄存器 CS DS SS ESMOVAL BL 将BL的内容传送到AL中MOVBX AX 将AX的内容传送到BX中采用寄存器寻址的指令在执行时 操作数就在CPU中 不需要访问存储器来取得操作数 执行速度快 另外寄存器名比内存地址短 指令所占内存空间少 7 3 直接寻址 有效地址EA EffectiveAddress 操作数的偏移地址 EA可通过不同的寻址方式来得到 直接寻址方式的有效地址在指令中直接给出 默认的段基址在DS段寄存器 可使用段前缀改变 用方括号包含有效地址 如 MOVAX 1000H 如果有效地址是以符号地址形式提供 则可不加方括号 MOVAX BUFA BUFA为符号地址 这时不加跨段前缀 默认仍为DS数据段 如BUFA变量在附加段中 就必须书写为 MOVAX ES BUFA 8 例子 物理地址 21000H AX 已知 DS 2000H 21000H 12H 21001H 34H 试给出指令MOVAX 1000H 执行后AX的内容 20000H 数据段 2FFFFH 21000H 21001H 12H 34H 存储器 指令执行后 AX 3412H 9 4 寄存器间接寻址 有效地址存放在基址寄存器BX BP或变址寄存器SI DI中 如用BX SI或DI作为间址寄存器 则默认的段基址在DS段寄存器 如用BP作为间址寄存器 则默认的段基址在SS段寄存器 可使用段前缀改变 MOVAX BX 若 DS 2000H BX 1000H 则将数据段21000H 21001H两个单元的内容送到AX中 MOVCX BP 若 SS 4000H BP 1000H 则将堆栈段41000H 41001H两个单元的内容送到CX中 MOVAX ES SI 若 ES 3000H SI 1000H 则将附加段31000H 31001H两个单元的内容送到AX中 10 5 基址寻址和变址寻址 有效地址是寄存器内容与有符号8位或16位位移量之和 寄存器可以是BX BP或SI DI 有效地址 BX BP SI DI 8 16位位移量如果寄存器为BX或BP 则为基址寻址如果寄存器为SI或DI 则为变址寻址段基址对应BX SI DI寄存器默认是DS 对应BP寄存器默认是SS 可用段前缀改变 11 例子 物理地址 45000H AX 已知 DS 4000H SI 2000H 内存单元 45000H 34H 45001H 12H 试给出指令MOVAX SI 3000H 执行后AX的内容 40000H 数据段 4FFFFH 45000H 45001H 34H 12H 存储器 指令执行后 AX 1234H 12 6 基址变址寻址 有效地址由基址寄存器 BX或BP 的内容加上变址寄存器 SI或DI 的内容构成 有效地址 BX BP SI DI 8 16位位移量段基址对应BX寄存器默认是DS 对应BP寄存器默认是SS 可用段前缀改变 该寻址方式适用于数组或表格存取 MOVAX 8 BX SI 默认操作数在数据段中MOVBX 6 BP DI 默认操作数在堆栈段中MOVBX ES BP DI 操作数在附加段中 13 7 固定寻址 固定寻址又叫隐含寻址 指令码中不包含指明操作数地址的部分 而其操码本身隐含地指明了操作数地址 如 十进制调整指令DAA 该指令的功能是对AL寄存器中的内容进行十进制调整 调整后的内容仍存放到AL中 隐含寻址的指令 不需要计算EA 执行速度快 而且大多为单字节指令 14 3 38086 8088的指令系统 符号的约定 OPD 目的操作数 8 16位 OPS 源操作数 8 16位 本节内容 数据传送类指令算术运算类指令逻辑运算与移位类指令串操作类指令控制转移类指令处理器控制类指令 15 3 3 1数据传送类指令 数据传送是计算机中最基本 最重要的一种操作 传送指令也是最常使用的一类指令 除标志寄存器传送指令外 均不影响标志位 本小节内容 通用数据传送指令标志寄存器传送指令目标地址传送指令输入 输出指令 16 1 通用数据传送指令 包括 MOV传送指令XCHG交换指令XLAT换码指令堆栈操作指令 17 1 MOV传送指令 格式 MOVOPD OPSMOV指令是使用最多的指令 它可以完成CPU内寄存器之间 寄存器与存储器之间的数据传送 还可以将立即数送入寄存器或内存 MOVAL BL 将寄存器BL的内容传送到寄存器AL中 MOV DI AX 将寄存器AX的内容传送到DI和DI 1所指的内存字单元中 MOVCX 1000H 将数据段中偏移地址1000H和1001H单元的内容送CX中 MOVBL 40 将立即数40传送到寄存器BL 18 MOV指令在使用时应该注意 立即数 CS和IP不能作为目的操作数 两个段寄存器之间不能相互传送数据 两个存储单元之间不能直接传送 不能将立即数直接传送到段寄存器 两个操作数的类型和长度必须一致 19 2 XCHG交换指令 格式 XCHGOPD OPS操作数的类型可以为字节或字 交换只能在通用寄存器之间 通用寄存器与存储器之间进行 XCHGAX BX AX和BX的内容互换 20 3 XLAT换码指令 格式 XLAT或XLAT表首址功能 使AL中的值变换为内存表格中的对应值 它是一条隐含寻址方式的指令 将数据段内有效地址为 BX AL 的内存字节单元中数据送入AL 该指令常用来查表 即将表头地址赋予BX 再将需求的表内位移地址赋予AL 最后运用XLAT指令即可以将该地址处的表值送到AL 21 XLAT换码指令的功能图 数据段 存储器 表 BX AL BX AL AL 22 4 PUSH入栈指令与POP出栈指令 堆栈是一个 后进先出LIFO 或说 先进后出FILO 的主存区域 位于堆栈段中 SS段寄存器记录其段基址 堆栈的存取操作都发生在栈顶 用堆栈指针寄存器SP指定 23 入栈指令PUSH 格式 PUSHOPS功能 修改指针 SP 2 SP 将OPS指定的寄存器 段寄存器或存储器中的一个字数据压入堆栈的顶部 PUSH指令在使用时应该注意 源操作数只能是16位 而不能是8位的 源操作数不能为立即数 24 PUSH指令的例子 例 假设在指令执行前 SP 1000H AX 1234H 试分析PUSHAX指令的执行结果 SP SP AX 12H 34H 25 出栈指令POP 格式 POPOPD功能 将栈顶的一个字数据送至OPD指明的寄存器 段寄存器 CS除外 或存储器中 修改指针 SP 2 SP POP指令在使用时应该注意 目的操作数只能是16位 而不能是8位的 立即数 CS不能作为目的操作数 26 POP指令的例子 例 假设在指令执行前 SP 0FFEH BX 2004H 并且堆栈段栈顶 0FFEH 单元内存放34H 0FFFH 单元内存放12H 试分析POPBX指令的执行结果 SP SP BX 12H 34H 1234H 27 2 标志寄存器传送指令 LAHF指令 取标志寄存器指令 将标志寄存器FR的低8位传送到AH中 SAHF指令 设置标志寄存器指令 将AH的内容传送到标志寄存器FR的低8位 PUSHF指令 将标志寄存器FR的值压入堆栈 POPF指令 从堆栈中弹出一个字到标志寄存器FR中 28 3 目标地址传送指令 包括 取偏移地址指令LEA传送偏移地址及数据段首址指令LDS传送偏移地址及附加段首址指令LES 29 1 取偏移地址指令LEA 格式 LEAOPD OPS功能 将源操作数的偏移地址送到目的操作数 该指令不影响标志位 源操作数必须是存储器操作数 目的操作数必须是16位通用寄存器 LEASI TABLE TABLE为存储器操作数的符号地址LEAAX SI 该指令等效于MOVAX SI指令 与MOVAX SI 指令的效果不同 注意区别 30 格式 LDSOPD OPS功能 从源操作数所指定的存储单元中取出某变量的地址指针 共4个字节 将低地址两个字节 偏移量 送到目的操作数 将高地址两个字节 段首址 送到DS中 该指令对标志位不影响 源操作数是双字类型存储器操作数 目的操作数必须是16位通用寄存器 2 传送偏移地址及数据段首址指令LDS 31 LDS指令的例子 设某双字存储单元的偏移地址为3000H 双字数据为12345678H 试分析LDSSI 3000H 指令的执行结果 DS SI 1234H 5678H 32 3 传送偏移地址及附加段首址指令LES 格式 LESOPD OPS功能 从源操作数所指定的存储单元取出某变量的地址指针 共4个字节 将低地址两个字节 偏移量 送到目的操作数 将高地址两个字节 变量的段首址 送到ES中 33 4 输入输出指令 输入 输出指令用于完成输入 输出端口与累加器 AL AX 之间的数据传送 指令中给出输入 输出端口的地址 包括 输入指令IN输出指令OUT 34 1 输入指令IN 格式 INOPD OPS功能 从端口 地址为n或在DX中 输入 位数据到AL或输入16位数据到AX INAL 40H 从40H端口读入一个字节送ALINAX 80H 从80H端口读入一个字节送AL 从81H端口读入一个字节送AHMOVDX 8F00H 将端口地址8F00H送DXINAL DX 从8F00H端口读入一个字节送AL 35 2 输出指令OUT 格式 OUTOPD OPS功能 从AL输出8位数据或从AX输出16位数据到端口 地址为n或在DX中 OUT40H AL 将AL内容送40H端口OUT80H AX 将AL内容送80H端口 将AH的内容送81H端口MOVDX 8F00H 将端口地址8F00H送DXOUTDX AL 将AL内容送8F00H端口 36 输入 输出指令在使用时应该注意 输入 输出指令对标志寄存器没有影响 端口地址大于255时 必须用DX指定端口地址 37 3 3 2算术运算类指令 可以完成带符号和不带符号的8位 16位二进制的算术运算 以及BCD码表示的十进制数的算术运算 包括 加法指令减法指令乘法指令符号扩展指令除运算指令十进制调整指令 38 1 加法指令 包括 不带进位加法指令ADD带进位加法指令ADC加1指令INC 39 1 不带进位加法指令ADD 格式 ADDOPD OPS功能 OPS OPD OPD 影响标志位CF AF PF SF OF和ZF 40 2 带进位加法指令ADC 格式 ADCOPD OPS功能 OPS OPD CF OPD 影响标志位CF AF PF SF OF和ZF ADC指令常用于多字的加法 41 3 加 指令 格式 INCOPD功能 将目的操作数OPD的内容加 并将结果回送到目的操作数 影响标志位AF PF SF OF和ZF 但不影响CF标志 INCAX AX中内容加 结果送回AXINCBL BL中内容加 结果送回BLINCBYTEPTR SI 将SI所指内存字节单元内容加 并回存 42 2 减法指令 包括 不带借位的减法指令SUB带借位的减法指令SBB减1指令DEC比较指令CMP求补指令NEG 43 1 不带借位的减法指令SUB 格式 SUBOPD OPS功能 OPD OPS OPD结果影响标志位CF AF PF SF OF和ZF SUBBX CX BX的内容减去CX的内容 结果放入BX 44 2 带借位的减法指令SBB 格式 SBBOPD OPS功能 OPD OPS CF OPD结果影响标志位CF AF PF SF OF和ZF SBB SI AL SI所指字节单元内容减AL的值 再减CF 结果存回原内存单元 45 3 减 指令DEC 格式 DECOPD功能 将目的操作数OPD的内容减 并将结果回送到目的操作数 影响标志位AF PF SF OF和ZF 但不影响CF标志 DECAX AX的内容减 结果送回AX DECCL CL的内容减 结果送回CL 46 4 比较指令CMP 格式 CMPOPD OPS功能 目的操作数OPD减去源操作数OPS 结果不回送 但影响标志位CF AF PF SF OF和ZF CMPAL 09H 将AL的内容和09H比较 结果影响标志位可以根据标志位的变化 来判断比较结果 通过ZF的值来判断两数是否相等 若ZF 1 说明两数相等 否则 两数不等 通过CF OF和SF的变化来判断无符号数或有符号数的大小 对于无符号数 如CF 0 则目的操作数比源操作数大 如CF 1 则目的操作数比源操作数小 对于有符号数 如OF SF 则目的操作数比源操作数大 如OF SF 则目的操作数比源操作数小 47 5 求补指令NEG 格式 NEGOPD功能 由目的操作数OPD求补 将其结果送回目的操作数 实际做0 OPD OPD运算 影响标志位CF AF PF SF OF和ZF MOVAL 05HNEGAL AL 0FBH CF 1MOVAL 05HNEGAL AL 05H CF 1 48 3 乘法指令 包括 无符号数乘法指令MUL有符号数乘法指令IMUL 49 1 无符号数乘法指令MUL 格式 MULOPS功能 字节乘法 AL OPS AX字乘法 AX OPS DX AX 50 图示 MUL指令在使用时应该注意 OPS不能是立即数 MUL指令只影响CF OF标志 对于字节乘法 若AH 0 则CF 1 OF 1 否则CF 0 OF 0 对于字乘法 若DX 0 则CF 1 OF 1 否则CF 0 OF 0 51 2 有符号数乘法指令IMUL 格式 IMULOPS功能 字节乘法 AL OPS AX字乘法 AX OPS DX AX IMUL指令的使用注意事项同MUL指令 52 4 符号扩展指令 包括 将字节扩展为字指令CBW将字扩展为双字指令CWD 53 1 将字节扩展为字指令CBW 格式 CBW功能 将AL的内容从字节扩展为字 存放到AX 若AL中数据的最高位为0 则 AH 00H 若AL中数据的最高位为1 则 AH 0FFH 该指令不影响标志位 54 2 将字扩展为双字指令CWD 格式 CWD功能 将AX的内容从字扩展为双字 存放到DX AX 若AX中数据的最高位为0 则 DX 0000H 若AX中数据的最高位为1 则 DX 0FFFFH 该指令不影响标志位 55 5 除运算指令 包括 无符号数除法指令DIV有符号数除法指令IDIV 56 1 无符号数除法指令DIV 格式 DIVOPS功能 字节除法 AX OPS AL 商 AH 余数 字除法 DX AX OPS AX 商 DX 余数 57 图示 DIV指令在使用应该注意 OPS不能是立即数 除法指令不影响标志位 除0会导致结果溢出 产生溢出中断 58 2 有符号数除法指令IDIV 格式 IDIVOPS功能 字节除法 AX OPS AL 商 AH 余数 字除法 DX AX OPS AX 商 DX 余数 59 6 十进制调整指令 前面的算术运算指令都是二进制运算指令 如何利用它们来进行BCD码十进制运算 一般方法是 首先对BCD码表示的十进制数进行二进制运算 然后再使用调整指令对运算结果进行调整 得出正确的BCD码表示的十进制运算结果 包括 加法的BCD码调整指令减法的BCD码调整指令乘法的非压缩BCD码调整指令AAM除法的非压缩BCD码调整指令AAD 60 1 加法的BCD码调整指令 包括 压缩BCD码调整指令DAA非压缩BCD码调整指令AAA 61 1 压缩BCD码调整指令DAA 格式 DAA功能 将AL中二进制加法运算的结果调整为两位压缩BCD码 结果仍保留在AL中 调整的方法 若AL的低4位大于9 则AL的内容加06H 并AF位置1 若AL的高4位大于9 则AL的内容加60H 并CF位置1 若AF 1 则低4位要加6 若CF 1 则高4位要加6 例如 MOVBL 34HMOVAL 56HADDAL BLDAA上述指令序列执行后 AL 90H CF 0 AF 0 62 2 非压缩BCD码调整指令AAA 格式 AAA功能 将AL中二进制加法运算结果调整为一位非压缩BCD码 调整后的结果仍保留在AL中 如果向高位有进位 AF 1 CF 1 则AH的内容加1 调整的方法 若AL的低4位大于9或AF 1 则自动将AL的内容加06H AH内容加1并置AF CF 1 将AL的高4位清零 若AL的低4位小于或等于9 则仅将AL的高4位清零 并AF CF DAA AAA指令在使用时应该注意 DAA AAA指令一般是紧跟在ADD或ADC指令后使用 单独使用没有意义 调整指令只对AL的内容进行调整 故在调整前 务必保证待调整结果出现在AL 63 2 减法的BCD码调整指令 包括 压缩BCD码调整指令DAS非压缩BCD码调整指令AAS 64 1 压缩BCD码调整指令DAS 格式 DAS功能 将AL中二进制减法运算的结果调整为两位压缩BCD码 结果仍保留在AL中 调整的方法 若AF 1或AL的低4位大于9 则自动 AL 06H AL 1 AF 若CF 1或AL的高4位大于9 则自动 AL 60H AL 1 CF 65 2 非压缩BCD码调整指令AAS 格式 AAS功能 将AL中二进制减法运算结果调整为一位非压缩BCD码 如果有借位 则保留在CF中 调整的方法 若AL的低4位大于9或AF 1 则自动将AL的内容减06H AH内容减1并置AF CF 1 将AL的高4位清零 若AL的低4位小于或等于9 则仅将AL的高4位清零 并AF CF DAS AAS指令在使用时的注意事项可参考加法调整指令 66 3 乘法的非压缩BCD码调整指令AAM 格式 AAM功能 将AL中二进制乘法运算结果调整为两位非压缩BCD码 高位放在AH 低位放在AL 影响标志位PF SF和ZF 该指令必须紧跟在MUL之后 且被乘数和乘数必须用非压缩的BCD码表示 67 4 除法的非压缩BCD码调整指令AAD 格式 AAD功能 用在两位非压缩的BCD码相除之前 将AX内容调整为二进制数 68 3 3 3逻辑运算与移位类指令 包括 逻辑运算指令移位指令循环移位指令 69 1 逻辑运算指令 可以对字或字节按位进行逻辑运算 包括 非运算指令NOT与运算指令AND测试指令TEST或运算指令OR异或运算指令XOR 70 1 非运算指令NOT 格式 NOTOPD功能 将目的操作数的内容按位取反后 再送回目的操作数 该指令不影响标志位 71 2 与运算指令AND 格式 ANDOPD OPS功能 将目的操作数的内容与源操作数按位相与 结果送回目的操作数 影响标志位SF ZF PF 使OF 0 CF 0 对AF无定义 例如 ANDAL 0FH执行前 AL 39H执行后 AL 09HAND指令常用于屏蔽不需要的位 上例中将AL高4位屏蔽 取得低4位 72 3 测试指令TEST 格式 TESTOPD OPS功能 将目的操作数的内容与源操作数按位相与 但结果不送回目的操作数 影响标志位SF ZF PF 使OF 0 CF 0 对AF无定义 例子 TESTAL 80H执行前 AL 39H执行后 ZF 1该指令可以用于判断目的操作数的某个数位是否1 上例中可以根据ZF 1 判断出AL内容的最高位为零 73 4 或运算指令OR 格式 OROPD OPS功能 将目的操作数的内容与源操作数按位相或 结果送回目的操作数 影响标志位SF ZF PF 使OF 0 CF 0 对AF无定义 该指令常用来将目的操作数的某一位或几位置1 74 5 异或运算指令XOR 格式 XOROPD OPS功能 将目的操作数的内容与源操作数按位异或 结果送回目的操作数 影响标志位SF ZF PF 使OF 0 CF 0 对AF无定义 由于某个操作数和同一个数异或结果为0 故异或运算常被用来比较两数是否相等或初始化某数为0 75 2 移位指令 这组指令可以对字节或字中的各位进行算术移位和逻辑移位 移位次数可以是 也可以大于 若移位次数大于 时 必须将次数预先放入CL 这组指令影响除AF以外的各个标志位 包括 算术左移指令SAL逻辑左移指令SHL算术右移指令SAR逻辑右移指令SHR 76 1 算术左移指令SAL 格式 SALOPD OPS功能 根据源操作数OPS中的移位次数 将目的操作数的内容连续进行左移操作 每次高位进入CF 最低位补0 例3 18MOVCL 3SALAL CL执行前 AL 01H执行后 AL 08H CF 0无符号数的算术左移一位相当于目的操作数乘2 77 2 逻辑左移指令SHL 格式 SHLOPD OPS功能 与算术左移指令SAL完全相同 78 3 算术右移指令SAR 格式 SAROPD OPS功能 根据源操作数OPS中的移位次数 将目的操作数的内容连续进行右移操作 每次低位进入CF 最高位用移位前的值填补 例如 SARBH CL执行前 BH 84H CL 2执行后 BH 0E1H CF 0 79 4 逻辑右移指令SHR 格式 SHROPD OPS功能 根据源操作数OPS中的移位次数 将目的操作数的内容连续进行右移操作 每次低位进入CF 最高位补0 例如 SHRAL CL执行前 AL 9AH CL 4执行后 AL 09H CF 1 80 图3 2移位指令操作过程 81 3 循环移位指令 循环移位次数的设置和移位指令相同 这组指令只影响CF OF标志位 循环移位指令常用于按位检查某单元的内容或实现某单元的半字或半字节互换等 包括 循环左移指令ROL循环右移指令ROR带进位的循环左移指令RCL带进位的循环右移指令RCR 82 1 循环左移指令ROL 格式 ROLOPD OPS功能 根据源操作数OPS中的移位次数 将目的操作数的内容连续进行循环左移操作 例如 ROLDL CL执行前 DL 0FAH CL 4执行后 DL 0AFH CF 1 83 2 循环右移指令ROR 格式 ROROPD OPS功能 根据源操作数OPS中的移位次数 将目的操作数的内容连续进行循环右移操作 84 3 带进位的循环左移指令RCL 格式 RCLOPD OPS功能 根据源操作数OPS中的移位次数 连续对目的操作数的内容带CF循环左移操作 85 4 带进位的循环右移指令RCR 格式 RCROPD OPS功能 根据源操作数OPS中的移位次数 连续对目的操作数的内容带CF循环右移操作 例3 19有一无符号32位二进制数存放在DX AX 其高16位在DX 低16位在AX 以下指令序列实现对该数的除2操作 SHRDX 1RCRAX 1 86 图3 3循环移位指令的操作过程 87 3 3 4串操作类指令 字符串是指存储器中顺序存放的类型相同的字节或字的序列 串操作是指对串中每个元素都执行同样的操作 规定一个字符串的长度最长不能超过64K字节 源串存放在数据段 用SI提供源串的偏移地址 目的串存放在附加段 用DI提供目的串的偏移地址 当方向标志DF 0 地址指针SI DI自动加1 字节串 或2 字串 当方向标志DF 1 地址指针SI DI自动减1 字节串 或2 字串 串操作指令前不加重复前缀 串操作只执行一次 如重复执行串操作 可以用CX存放重复的次数 每重复执行一次 CX内容减1 当CX内容减为0时 串操作停止 88 3 3 4串操作类指令 续 包括 重复指令前缀数据字节串 字串传送指令数据字节串 字串比较指令数据字节串 字串检索指令数据字节串 字串读出指令数据字节串 字串写入指令 89 1 重复指令前缀 包括 无条件重复前缀REP相等 为零重复前缀REPE REPZ不相等 不为零重复前缀REPNE REPNZ 90 1 无条件重复前缀REP 格式 REP功能 用于一个串操作指令的前缀 每重复执行一次串操作指令 CX的内容减1 直到 CX 0为止 执行步骤如下 先判断CX的内容 如 CX 0 则串操作停止 否则执行第 步 CX 1 CX 执行其后的串操作指令 转第 步 91 2 相等 为零重复前缀REPE REPZ 格式 REPE REPZ功能 用于一个串操作指令的前缀 每重复执行一次串操作指令 CX的内容减1 直到 CX 0或ZF 0为止 执行步骤如下 先判断CX的内容 如 CX 0或ZF 0 则串操作停止 否则执行第 步 CX 1 CX 执行其后的串操作指令 转第 步 92 3 不相等 不为零重复前缀REPNE REPNZ 格式 REPNE REPNZ功能 用于一个串操作指令的前缀 每重复执行一次串操作指令 CX的内容减1 直到 CX 0或ZF 1为止 执行步骤如下 先判断CX的内容 如 CX 0或ZF 1 则串操作停止 否则执行第 步 CX 1 CX 执行其后的串操作指令 转第 步 93 2 数据字节串 字串传送指令 格式 MOVSB MOVSW功能 将数据段中由 DS SI 指向的源串的一个字节 字 传送到附加段由 ES DI 指向的目的串中 且相应修改地址指针 使其指向下一个字节 字 例 将内存单元首地址3100H起的100个字节传送到首地址2800H的内存单元 CLDMOVSI 3100HMOVDI 2800HMOVCX 100REPMOVSB 94 3 数据字节串 字串比较指令 格式 CMPSB CMPSW功能 将数据段中由 DS SI 指向源串的一个字节 字 减去附加段由 ES DI 指向的目的串的一个字节 字 不回送结果 只根据结果影响标志位 并相应修改地址指针 使其指向下一个字节 字 例 检查内存单元首地址2200H起的50个字节与首地址3200H起的50个字节是否对应相等 如相等 则BX 0 若不相等 BX指向第一个不相等的字节单元 AL存放第一个不相等的源串内容 CLDMOVSI 2200HMOVDI 3200HMOVCX 50REPECMPSBJZLP1DECSIMOVBX SIMOVAL SI JMPLP2LP1 MOVBX 0LP2 95 4 数据字节串 字串检索指令 格式 SCASB SCASW功能 将AL AX 的内容减去附加段由 ES DI 指向的目的串的一个字节 字 不回送结果 只根据结果影响标志位 并相应修改地址指针 使其指向下一个字节 字 例 在内存附加段首地址为4300H起的100个字节中 查找是否有 如有 则将偏移地址送BX 否则BX 0 CLDMOVDI 4300HMOVAL REPNZSCASBJNZLP1DECDIMOVBX DI 找到 偏移地址送BXJMPLP2LP1 MOVBX 0 未找到LP2 96 5 数据字节串 字串读出指令 格式 LODSB LODSW功能 将数据段中由 DS SI 指向源串的一个字节 字 读出 放入AL AX 中 并相应修改地址指针 使其指向下一个字节 字 97 6 数据字节串 字串写入指令 格式 STOSB STOSW功能 将AL AX 的内容写入附加段中由 ES DI 指向的目的串一个字节 字 中 并相应修改地址指针 使其指向下一个字节 字 例3 23将内存数据段首地址为1800H起的100个字节清零 CLDMOVDI 1800HMOVCX 100XORAL ALREPSTOSB 98 3 3 5控制转移类指令 控制转移指令用来控制程序的执行流程 程序执行顺序的改变实际上是通过修改代码段寄存器CS和指令指针IP的内容来实现的 包括 无条件转移指令条件转移指令循环转移指令子程序调用和返回指令中断和中断返回指令 99 1 无条件转移指令 无条件地转移到指令指定的地址去执行从该地址开始的指令 包括 段内直接短转移段内直接转移段内间接转移段间直接转移段间间接转移 100 1 段内直接短转移 格式 JMPSHORT目标标号功能 无条件地转移到标号所指定的目标地址去执行程序 目标地址与JMP指令的下一条指令地址之差在 128 127字节之间 101 2 段内直接转移 格式 JMP目标标号JMPNEARPTR目标标号功能 转移的范围扩大到 32768 32767字节之间 102 3 段内间接转移 格式 JMPWORDPTROPD功能 转移到OPD所指定的目标地址去执行程序 OPD只能是16位寄存器或两个连续存储的内存字节单元 转移范围为64KB 103 4 段间直接转移 格式 JMPFARPTR目标标号功能 将目标标号所在的段基址送CS 将目标标号相对所在段的段内偏移地址送IP 可以转移范围为1MB 104 5 段间间接转移 格式 JMPDWORDPTROPD功能 目的操作数为双字 将目的操作数的第一个字送IP 将目的操作数的第二个字送CS 可以转移范围为1MB 例如 JMPDWORDPTR BX 执行前 BX 2000H DS 5000H 52000H 0200H 52002H 0400H执行后 IP 0200H CS 0400H CPU转到地址为04200H单元执行程序 105 2 条件转移指令 满足条件 则转移 不满足条件则顺序执行 转移范围都只有 128 127个字节 所有条件转移指令对标志位均无影响 包括 单标志位转移指令无符号数的条件转移指令有符号数的条件转移指令测试CX条件转移指令 106 1 单标志位转移指令 107 2 无符号数的条件转移指令 该组转移指令用于无符号数的比较 并根据比较的结果进行转移 108 3 有符号数的条件转移指令 该组转移指令用于有符号数的比较 并根据比较的结果进行转移 109 4 测试CX条件转移指令 格式 JCXZ目标标号功能 若 CX 0 则转移到目标标号所指定地址去执行程序 110 3 循环转移指令 一般用它们来实现程序循环 循环的次数必须放在CX寄存器中 这组指令也不影响标志位 包括 计数循环指令相等 为零计数循环指令不相等 不为零计数循环指令 111 1 计数循环指令 格式 LOOP标号功能 每执行一次LOOP指令 CX的内容减 若CX 0 则循环转移到标号所指定的目标地址去重复执行程序 直到CX 0 退出循环 接着执行LOOP指令的下一条指令 例 MOVCX 0100H 设置循环次数DELAY LOOPDELAYLOOP指令执行转移时 用9个时钟周期 结束循环指向下一条指令时 用5个时钟周期 程序员可以设置循环次数 来控制延迟的时间 112 2 相等 为零计数循环指令 格式 LOOPE LOOPZ标号功能 每执行一次循环指令 CX的内容减 若CX 0且ZF 1 则循环转移到标号所指定的目标地址去重复执行程序 否则执行循环指令的下一条指令 113 3 不相等 不为零计数循环指令 格式 LOOPNE LOOPNZ标号功能 每执行一次循环指令 CX的内容减 若CX 0且ZF 0 则循环转移到标号所指定的目标地址去重复执行程序 否则执行循环指令的下一条指令 114 4 子程序调用和返回指令 包括 子程序调用指令CALL返回指令RET 115 1 子程序调用指令 包括 段内直接调用段内间接调用段间直接调用段间间接调用 116 1 段内直接调用 格式 CALL标号功能 首先将返回地址 CALL指令的下一条指令 16位偏移地址 压入堆栈 然后将标号所指的子程序在本段中的偏移地址送入IP 转子程序执行 117 2 段内间接调用 格式 CALLWORDPTROPD功能 首先将返回地址压入堆栈 然后将目的操作数的内容送入IP 转至同一段内的子程序执行 118 3 段间直接调用 格式 CALLFARPTR标号功能 首先将断点地址CS IP顺序压入堆栈 然后将标号所在的段基址送入CS 将标号相对所在段的偏移地址送入IP 转子程序执行 119 4 段间间接调用 格式 CALLDWORDPTROPD功能 首先将断点地址CS IP顺序压入堆栈 然后将有效地址指定的4个字节送入IP CS 低地址的两个字节送IP 高地址的两个字节送CS 转子程序执行 120 2 返回指令 返回指令用来控制程序返回断点地址处 相应CALL指令的下一条指令 继续执行下去 包括 返回指令带弹出值的返回指令 121 1 返回指令 格式 RET功能 把断点地址从堆栈弹出送IP或IP CS 如该子程序为FAR类型 首先从堆栈弹出一个字送IP SP 2 SP 再从堆栈弹出一个字送CS SP 2 SP 如该子程序为NEAR类型 从堆栈弹出一个字送IP SP 2 SP 从而返回主程序 122 2 带弹出值的返回指令 格式 RETn功能 n为偶数 在执行RET指令后 再修改指针SP n SP 也即先从堆栈弹出断点地址送IP或IP CS 再废除栈顶的n个字节 123 注意 CALL和RET指令不影响标志位 CALL和RET指令必须成对使用 与无条件转移指令的不同之处 在于它含有将断点地址入栈和出栈的操作 124 5 中断和中断返回指令 中断指令 使CPU暂停执行后续指令 而转去执行相应的中断服务程序 中断返回指令 从中断服务程序返回主程序 包括 软中断指令中断返回指令溢出中断指令 125 1 软中断指令 格式 INTn功能 n为中断类型码 可以取0 0FFH之间的256个值 每个中断类型码在中断矢量表中占4个字节 前两个字节用来存放中断服务程序入口地址的偏移地址 后两个字节用来存放段基址 CPU执行INT指令时 首先将标志寄存器FR入栈 接着清除IF TF 然后将当前程序断点的段基址和偏移地址入栈保护 最后将中断矢量表中与中断类型码对应的4个字节内容先后送入IP CS 这样CPU转去执行中断服务程序 126 2 中断返回指令 格式 IRET功能 放在中断服务程序的出口处 由它从堆栈中弹出程序断点分别送IP CS 并弹出一个字送标志寄存器FR 以退出中断 返回到断点处执行后续程序 中断服务程序的最后一条指令必须是IRET 127 3 溢出中断指令 格式 INTO功能 该指令为单字节指令 中断类型码为4 放在有符号的算术运算指令之后 仅当运算产生溢出 OF 1 时 即向CPU发出溢出中断请求 128 3 3 6处理器控制类指令 包括 标志位操作指令外部同步指令 129 1 标志位操作指令 进位位清0指令 CLC进位位求反指令 CMC进位位置1指令 STC关中断指令 CLI 置IF 0 禁止外部可屏蔽中断 开中断指令 STI 置IF 1 允许外部可屏蔽中断 方向标志清0指令 CLD方向标志置1指令 STD 130 2 外部同步指令 空操作指令NOP不执行任何操作 其机器码占一个字节 暂停指令HLT该指令执行后 使机器暂停工作 使处理器处于停机状态 以等待一次外部中断到来 中断结束后 程序继续执行 处理器继续工作 交权指令ESC协处理器在系统加电工作后 就不断检测CPU是否需要协助工作 当发现ESC指令时 被选定的协处理器便开始工作 等待指令WAIT该指令每隔5个时钟周期就测试一次TEST信号 若该信号为高电平 CPU继续执行WAIT指令 进入等待状态 否则结束等待 执行后续指令 131 3 480386的寻址方式和指令系统 本节内容 80386的寻址方式80386的指令系统 132 3 4 180386的寻址方式 包括立即寻址 寄存器寻址 直接寻址和寄存器间接寻址 按照80386系统的存储器组织方式 逻辑地址由选择子和偏移量组成 偏移量的计算方法 偏移量 基址 变址 比例因子 位移量 基址 任何通用寄存器都可以作为基址寄存器 位移量 在指令操作码后面的32位 16位或8位数 变址 除了ESP寄存器外 任何通用寄存器都可以作为变址寄存器 比例因子 可以为1 2 4或8 按照4个分量组合偏移量的不同方法 可以有9种存储器寻址方式 其中8种属于寄存器间接寻址 133 9种存储器寻址方式 包括 直接寻址方式寄存器间接寻址方式基址寻址方式变址寻址方式带比例因子的变址寻址方式基址变址寻址方式基址加带比例因子的变址寻址方式带位移量的基址加变址寻址方式带位移量的基址加带比例因子的变址寻址方式 134 1 直接寻址方式 位移量就是操作数的有效地址 此位移量包含在指令中 例 DECWORDPTR 200 有效地址为200 偏移量 基址 变址 比例因子 位移量 135 2 寄存器间接寻址方式 基址寄存器的内容为操作数的有效地址 例 MOV EBX EAX 有效地址在EBX 偏移量 基址 变址 比例因子 位移量 136 3 基址寻址方式 基址寄存器的内容和位移量相加形成有效地址 例如 MOV EBX 100 EAX 有效地址为EBX的内容加100 偏移量 基址 变址 比例因子 位移量 137 4 变址寻址方式 变址寄存器的内容和位移量相加形成有效地址 例 SUBEAX ESI 20 有效地址为ESI的内容加20 偏移量 基址 变址 比例因子 位移量 138 5 带比例因子的变址寻址方式 变址寄存器的内容乘以比例因子 再与位移量相加形成有效地址 例 SUBEAX ESI 8 7 有效地址为ESI的内容乘以8再加7 偏移量 基址 变址 比例因子 位移量 139 6 基址变址寻址方式 基址寄存器的内容加上变址寄存器的内容组成有效地址 例 SUBEAX ESI EBX 有效地址为EBX内容加ESI内容 偏移量 基址 变址 比例因子 位移量 140 7 基址加带比例因子的变址寻址方式 变址寄存器的内容乘以比例因子再加上基址寄存器的内容组成有效地址 例 MOVECX EDI 2 EBX 有效地址为EDI内容乘以2再加EBX内容 偏移量 基址 变址 比例因子 位移量 141 8 带位移量的基址加变址寻址方式 基址寄存器的内容加位移量 再加上变址寄存器的内容组成有效地址 例 MOVEDX ESI EBP 200H 有效地址为EBP内容加200H加ESI内容 偏移量 基址 变址 比例因子 位移量 142 9 带位移量的基址加带比例因子的变址寻址方式 变址寄存器的内容乘以比例因子 再加上基址寄存器内容与位移量之和组成有效地址 例 MOVECX EDI 2 EBX 20 有效地址为EDI内容乘以2 再加EBX内容再加20 偏移量 基址 变址 比例因子 位移量 143 3 4 280386的指令系统 80386的指令系统完全兼容8086指令系统80386指令系统扩展了数据宽度 对存储器寻址方式也进行了扩充 另外还增加了少量指令 包括 数据传送类指令算术运算类指令逻辑运算类指令串操作指令转移 循环和调用指令条件设置指令系统设置和测试指令 144 1 数据传送类指令 包括 通用数据传送指令标志寄存器传送指令目标地址传送指令输入 输出指令 145 1 通用数据传送指令 使用MOV指令时 两个操作数的位数必须相同 如不同 可以选用新增的MOVZX和MOVSX指令 如 MOVZXAX BL 该指令将BL的内容带符号扩展为一个字送入AX 另外PUSH指令的功能有所扩展 其源操作数可以是立即数 如 PUSH0204H另外 80386指令系统还提供了PUSHA指令 可以将全部16位寄存器一次压入堆栈 提供的PUSHAD指令可以全部32位寄存器一次压入堆栈 146 2 标志寄存器传送指令 在LAHF SAHF PUSHF和POPF的基础上 增加了两条指令 即 PUSHFD 将标志寄存器的内容作为双字压入堆栈POPFD 从堆栈弹出双字送标志寄存器 147 3 地址传送指令 80386的地址传送指令实现 字节的地址指针传送 地址指针来自存储单元 目的地址为两个寄存器 其中一个为段寄存器 一个为双字的通用寄存器 LDSEBX DATA 将DATA开始的指针送DS EBX寄存器LSSESP DATA 将DATA开始的指针送SS ESP寄存器这些指令适合32位微机系统的多任务操作 因为在任务切换时 需要同时改变段寄存器和偏移量指针的值 148 4 输入 输出指令 输入 输出指令和8086完全相同 端口地址可以在指令中给出 也可以由DX寄存器给出 149 2 算术运算类指令 算术运算指令的用法和8086中基本一致 只是在80386指令系统中 运算支持32位 例如 ADDEAX 0FF200A0H 将EAX内容加0FF200A0H送回EAX寄存器SUBEAX EBX 将EAX内容减去EBX内容送回EAX寄存器在80386指令系统中 对IMUL指令给出两种扩充形式 例如 IMULDX BX 100 将BX的内容乘以100 结果送DX寄存器这类指令是用一个立即数去乘一个放在寄存器或存储器中的数 结果放入指定的寄存器 例如 IMULEDX ECX 将EDX的内容乘以ECX内容 结果送EDX这类指令是一个寄存器操作数乘一个同样长度的放在寄存器或存储器的数 结果放入该寄存器 但由于这两类指令的乘积和被乘数 乘数的长度一样 有时会产生溢出 如溢出 OF标志被自动置1 150 3 逻辑运算类指令 逻辑运算指令包括逻辑运算和移位指令 这两组指令的用法和8086中基本一致 只是在80386指令系统中 运算和移位支持32位 例如 ANDEAX EBX 将EAX内容与EBX内容相与 结果送回EAXROLEBX CL 按CL指定的次数将EAX内容循环左移在80386指令系统中 还增加了两条专用的双精度移位指令 即双精度左移指令SHLD和双精度右移指令SHRD 例如 SHRDEAX EBX 10 这条指令将EAX的内容右移10位 高10位由EBX的低10位来补充 而EBX的内容不变 151 4 串操作指令 80386的串操作指令和8086中基本一致 包括MOVS CMPS SACS LODS和STOS 此外 80386指令
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 口才表达能力训练
- 上饶市中医院艾滋病职业暴露预防与处置考核
- 南京市中医院医疗信息系统操作考核
- 宁波市人民医院后勤信息化系统操作入门考核
- 厦门市中医院人工真皮应用技术考核
- 徐州市人民医院急救预案演练考核
- 综合解析苏科版九年级物理上册《简单机械和功》综合测试试题(含答案解析版)
- 台州市中医院荧光免疫技术考核
- 漳州市人民医院特殊部位放疗技术考核
- 合肥市人民医院前庭康复治疗技能考核
- 乳牙的解剖形态
- 两篇古典英文版成语故事画蛇添足
- 大数据处理的基本思想与架构 课件 高中信息技术必修1
- GB/T 507-2002绝缘油击穿电压测定法
- 2023年洞口县水利系统事业单位招聘笔试题库及答案
- 幼儿园食品安全舆情监测和处置机制制度
- 物料与产品管理规程
- 环保领导组组织机构及工作职责
- DB32T 4285-2022 预应力混凝土空心方桩基础技术规程
- 工资结算协议
- 水冷壁安装施工方案
评论
0/150
提交评论