《指令系统》课件.ppt_第1页
《指令系统》课件.ppt_第2页
《指令系统》课件.ppt_第3页
《指令系统》课件.ppt_第4页
《指令系统》课件.ppt_第5页
已阅读5页,还剩152页未读 继续免费阅读

下载本文档

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

文档简介

微机原理及应用 主讲教师陈玮 2020 3 23 2 第三章8086 8088指令系统 一 指令格式与寻址方式二 数据传送类指令三 算术运算指令四 逻辑运算指令五 移位指令作业六 串操作指令七 控制转移指令八 处理器控制指令作业 2020 3 23 3 一 指令格式与寻址方式 指令 Instruction 是指示CPU执行某种操作的命令 指令系统 InstructionSet 是某一CPU所能执行的全部指令的集合 也称为指令集 8086 8088的指令系统完全相同 指令是构成程序的基础 程序是指令的有序组合 CPU执行程序就是执行一条条指令 1 指令格式2 寻址方式 2020 3 23 4 二 数据传送类指令 1 通用数据传送指令2 地址传送指令3 状态标志传送指令 2020 3 23 5 三 算术运算指令 1 加法运算指令2 减法指令3 乘法指令4 除法指令例题 2020 3 23 6 四 逻辑运算指令 1 与 运算指令AND2 或 运算指令OR3 非 运算指令NOT4 异或 运算指令XOR5 测试指令TEST 2020 3 23 7 五 移位指令 1 逻辑移位指令2 算术移位指令3 循环移位指令4 通过进位位循环移位指令例题 2020 3 23 8 七 控制转移指令 1 控制转移指令的寻址方式2 无条件转移指令3 条件转移指令4 循环控制指令5 过程调用和返回指令 2020 3 23 9 八 处理器控制指令 1 标志位操作指令2 与外部事件协调同步的指令3 空操作指令 2020 3 23 10 1 指令格式 1 操作码指定CPU执行某种操作 如传送 运算等 2 操作数为参与操作的数据 如寄存器中的数据或内存单元中的数据等 包含一个操作数的指令称为单操作数指令 包含两个操作数的指令称为双操作数指令 在指令执行过程中使用的操作数 保持原值不变的称为源操作数 不保留原值而将处理结果存入其中的称为目的操作数 一条指令通常包括两部分 操作码和操作数 格式 2020 3 23 11 2 寻址方式 AddressingMode 1 指令寻址方式指令通常是顺序存放的 因此只要通过对指令指针自动加1 便形成下条指令地址 只有当遇到转移指令或调用指令时 根据转移目标去修改IP或CS 2 操作数寻址方式所谓操作数寻址方式 就是寻找指令中所需操作数的方法 2020 3 23 12 2 寻址方式 AddressingMode 操作数的来源 包含在指令中 紧跟在操作码之后 称为立即数 操作数在CPU的某个寄存器中 操作数在内存的某单元中 这时指令中给出的是操作数所在单元的地址 或者是产生该地址的计算方法 操作数在某I O端口中 2020 3 23 13 2 寻址方式 AddressingMode 由于操作数的不同来源 产生了三大类寻址方式 1 立即数寻址 2 寄存器寻址 3 内存寻址例题 2020 3 23 14 1 立即 数 寻址 当操作数就在指令中时 称为立即 数 寻址 这种操作数称为立即数 8位或16位均可 如 MOVAL 12H说明 这条指令的功能就是将立即数12H传送到寄存器AL中 执行完该条指令后 AL 12H或表示成 AL 12H 2020 3 23 15 1 立即 数 寻址 MOVAX 1234H说明 这条指令的功能就是将立即数1234H传送到寄存器AX中 执行完该条指令后 AX 1234H或表示成 AX 1234H 2020 3 23 16 1 立即 数 寻址 MOVAL 12H这是一条双操作数指令 其中 MOV就是操作码 立即数12H称为源操作数 寄存器AL称为目的操作数 特点 源操作数在执行指令后 它的值不会发生变化 立即数不能作为目的操作数 2020 3 23 17 2 寄存器寻址 SegmentAddressing 当操作数在寄存器中时为寄存器寻址 或称寄存器直接寻址 如 MOVAL 12H说明 目的操作数AL即为寄存器寻址 MOVAX BX说明 这条指令的功能就是将寄存器BX的内容传送到寄存器AX中 执行完该条指令后 AX的内容和BX的内容一样 表示成AX BX 2020 3 23 18 3 内存寻址 MemoryAddressing 当操作数在内存中时为内存寻址 称其为内存操作数 注意 一条指令中只允许有一个内存操作数 内存寻址时 指令中给出的是操作数的有效地址EA或产生EA的计算方式 EA即是逻辑地址中的偏移地址 2020 3 23 19 3 内存寻址 MemoryAddressing 直接寻址 寄存器间接寻址 相对基址 变址寻址 基址变址寻址 相对基址变址寻址 2020 3 23 20 直接寻址 EA由指令中直接给出的16位偏移量单独构成时称为内存寻址中的直接寻址 16位偏移量应带有方括号 如 1 MOVAL 1234H 说明 根据指令EA 1234H 段地址即取当前数据段DS 设DS 2000H 20位物理地址 DS 10H 1234H 21234H 该指令的功能就是将内存单元 21234H 的字节内容传送到寄存器AL中 或表示为 2000H 1234H A1H也即将A1H送AL 当执行完该指令后 AL A1H 2020 3 23 21 直接寻址 2 MOVAX 1234H 说明 根据指令EA 1234H 段地址即取当前数据段DS 设DS 2000H 则20位物理地址 DS 10H 1234H 21234H 该指令的功能就是将内存单元 21234H 的字内容传送到寄存器AX中 也可表示为 2000H 1234H 66A1H 也就是将66A1H送AX 因此 当执行完该指令后 AX 66A1H 2020 3 23 22 寄存器间接寻址 有效地址EA的内容由寄存器内容给出 称为内存寻址中的寄存器间接寻址 寄存器应带有方括号 如MOVAL BX EA BXMOVAX SI EA SIMOVAX DI EA DI 求物理地址的方法与内存寻址中的直接寻址方法一样 2020 3 23 23 相对基址 变址寻址 EA由指令中给出的基址 变址寄存器和位移量组成 如 MOVAL BX 0120H EA BX 0120H通式 其中D为位移量 注意 求物理地址的方法与内存寻址中的直接寻址方法一样 注意对应的段 2020 3 23 24 基址变址寻址 有效地址EA由基址寄存器和变址寄存器组成 如 MOVAL BX SI EA BX SI或MOVAL BX SI EA BX SI通式 注意 求物理地址的方法与内存寻址中的直接寻址方法一样 注意对应的段 2020 3 23 25 相对基址变址寻址 EA由基址寄存器 变址寄存器和位移量组成 如 MOVAL BP DI 20H EA BP DI 20H或MOVAL 20H BP DI EA BP DI 20H通式 注意 求物理地址的方法与内存寻址中的直接寻址方法一样 注意对应的段 2020 3 23 26 例题 1 指出各指令中源操作数和目的操作数的寻址方式 并说明操作数的类型 字节或字数据 1 MOVSI 1000H答 源操作数是立即数寻址 目的操作数是寄存器寻址 传送的是字数据 2020 3 23 27 例题 1 指出各指令中源操作数和目的操作数的寻址方式 并说明操作数的类型 字节或字数据 2 MOVBL 1000H 答 源操作数是内存寻址中的直接寻址EA 1000H 目的操作数是寄存器寻址 传送的是字节数据 2020 3 23 28 例题 1 指出各指令中源操作数和目的操作数的寻址方式 并说明操作数的类型 字节或字数据 3 MOV BX 0100H CX答 源操作数是寄存器寻址 目的操作数是内存寻址中的相对基址寻址 EA BX 0100H 传送的是字数据 2020 3 23 29 例题 1 指出各指令中源操作数和目的操作数的寻址方式 并说明操作数的类型 字节或字数据 4 MOVBYTEPTR BX SI 100答 源操作数是立即数寻址 十进制数100 目的操作数是内存寻址中基址变址寻址 EA BX SI 传送的是字节数据 说明 斜体字是伪指令 表示是字节 2020 3 23 30 例题 1 指出各指令中源操作数和目的操作数的寻址方式 并说明操作数的类型 字节或字数据 5 MOVAX BX DI 0004H 答 源操作数是内存寻址中的相对基址变址寻址 EA BX DI 0004H 目的操作数是寄存器寻址 传送的是字数据 2020 3 23 31 例题 1 指出各指令中源操作数和目的操作数的寻址方式 并说明操作数的类型 字节或字数据 6 MOVAX BX 答 源操作数是内存寻址中的寄存器间接寻址 EA BX 目的操作数是寄存器寻址 传送的是字数据 2020 3 23 32 1 通用数据传送指令 1 MOV指令注意点 2 PUSH和POP指令 3 交换指令XCHG 4 换码指令XLAT 2020 3 23 33 换码指令XLAT 指令格式 XLAT表首址 表首址可省略 指令功能 将AL中的值转换为内存表格中某一值后 送回AL 这条指令完成一个字节的查表转换 指令隐含规定用BX和AL 两者之和为访问的内存单元 例题 2020 3 23 34 换码指令XLAT 例题 设计一个0 9的平方表 通过换码指令求出对应的0 9的数的平方 解 SQUR TABDB0 1 4 9 16 25 36 49 64 81 首先在内存中 设一个数据表 开始使用LEABX SQUR TAB 将表首偏移地址装入BXMOVAL 05H 求5的平方XLAT 换码 此时AL内的值即为25 2020 3 23 35 2 地址传送指令 地址传送指令主要用来将地址指针装入有关寄存器 1 装入有效地址指令 2 装入数据段寄存器指令 3 装入附加段寄存器 2020 3 23 36 1 装入有效地址指令 LoadEffectiveAddress 指令格式 LEAdst src指令功能 EASRC dst 通用寄存器 这条指令用来将源操作数 内存操作数 的有效地址EA装入通用寄存器 不影响标志位 LEAAX 1000H 执行指令后 AX 1000H LEAAX BX 执行指令后 AX BX 注意区别 MOVAX BX LEABX data data是一个变量 或称为符号地址执行指令后 BX等于变量data的偏移地址 2020 3 23 37 2 装入数据段寄存器指令 LoadDataSegmentRegister 指令格式 LDSdst src指令功能 src给出的是有效地址 低字送dst 高字送DS 这条指令用来将内存中的双字数据 4个字节 装入通用寄存器和数据段寄存器DS 例 已知DS 1000H 11500H 2345H 11502H ABCDH请问 执行指令LDSSI 1500H SI DS 答 SI 2345H DS ABCDH 2020 3 23 38 3 装入附加段寄存器 LoadExtraSegmentRegister 指令格式 LESdst src指令功能 src给出的是有效地址 低字送dst 高字送ES 这条指令用来将内存中的双字数据装入通用寄存器和附加段寄存器ES 2020 3 23 39 1 MOV指令 是基本传送类指令 实现字或字节数据的复制 指令格式 MOVdst src指令功能 将源操作数src 传送到目的操作数dst中 如 MOVAL 12H功能 执行指令就是将立即数12H传送到AL中 执行完指令后AL 12H 2020 3 23 40 1 MOV指令 MOV传送类指令可以实现六种形式的传送 立即数送寄存器 如 MOVBX 1122H BX 1122H 立即数送存储单元 如 MOV BX 1122H 将1122H送到EA BX 的内存单元中 2020 3 23 41 1 MOV指令 通用寄存器之间的传送 如 MOVBX AX BX AXMOVAL AH AL AH 通用寄存器和段寄存器之间的传送 如 MOVDS AX DS AXMOVAX ES AX ES 2020 3 23 42 1 MOV指令 通用寄存器和存储单元之间的传送 如 MOVAL BX 将EA BX的内存单元 的内容送寄存器ALMOV 1400H BX 将BX的内容送EA 1400 的内存单元 段寄存器和存储单元之间的传送 如 MOV 1400H CS 将CS的内容送EA 1400 的内存单元MOVDS BX 将EA BX的内存单元内容 送DS 2020 3 23 43 例题 设DS 1000H SS 2000H AX 1A2BH BX 1200H CX 339AH BP 1200H SP 1352H SI 1354H 11350H 0A5H 11351H 3CH 11352H 0FFH 11353H 26H 11354H 52H 11355H 0E7H 126A4H 9DH 126A5H 16H 21350H 88H 21351H 51H 求以下各指令执行后的值 1 MOVAX 1352HAX 答 AX 1352H 2020 3 23 44 例题 设DS 1000H SS 2000H AX 1A2BH BX 1200H CX 339AH BP 1200H SP 1352H SI 1354H 11350H 0A5H 11351H 3CH 11352H 0FFH 11353H 26H 11354H 52H 11355H 0E7H 126A4H 9DH 126A5H 16H 21350H 88H 21351H 51H 求以下各指令执行后的值 2 MOVAX 1352H AX 答 EA 1352H DS 1000H 内存单元地址 DS 10H EA 11352H 所以 AX 26FFH 2020 3 23 45 例题 设DS 1000H SS 2000H AX 1A2BH BX 1200H CX 339AH BP 1200H SP 1352H SI 1354H 11350H 0A5H 11351H 3CH 11352H 0FFH 11353H 26H 11354H 52H 11355H 0E7H 126A4H 9DH 126A5H 16H 21350H 88H 21351H 51H 求以下各指令执行后的值 3 MOV0150H BX CH 11350H 11351H 答 因为EA BX 0150H 1350H CH 33H 内存单元地址 DS 10H 1350H 11350H 所以 11350H 33H 11351H 3CH 2020 3 23 46 例题 设DS 1000H SS 2000H AX 1A2BH BX 1200H CX 339AH BP 1200H SP 1352H SI 1354H 11350H 0A5H 11351H 3CH 11352H 0FFH 11353H 26H 11354H 52H 11355H 0E7H 126A4H 9DH 126A5H 16H 21350H 88H 21351H 51H 求以下各指令执行后的值 4 MOVAX 0150H BP AX 答 因为EA BP 0150H 1350H 内存单元的地址 SS 10H 1350H 21350H 所以 AX 5188H 2020 3 23 47 使用MOV的注意点 1 两个操作数的类型必须一致 2 两个操作数不能同时为存储器操作数 3 不能用CS做目的操作数 4 不允许用立即数做目的操作数 5 不允许用立即数直接向段寄存器传送数据 6 不允许在段寄存器之间直接传送数据 传送指令不影响标志位 2020 3 23 48 两个操作数不能同时都是存储器操作数 如图所示 如果想将 21233H 的内容传送到 21235H 必须通过寄存器中转 通过两条指令实现 MOVAH 1233 FFH FFH MOV 1235 AH 2020 3 23 49 2 PUSH和POP指令 堆栈操作指令 堆栈段是用来保存数据和地址的一个存储区 堆栈段寄存器用SS表示 堆栈段栈顶指针是SP 隐含 由于堆栈段只有一个出入口 堆栈操作按先入后出的方式工作 入栈指令PUSH 出栈指令POP不影响标志位 2020 3 23 50 入栈指令PUSH 指令格式 PUSHsrc指令功能 SP 2 SP 隐含操作 将字数据src送到EA SP的堆栈段内 如 PUSHAX 2020 3 23 51 入栈指令PUSH 指令PUSHAX的执行情况 2020 3 23 52 出栈指令POP 指令格式 POPdst指令功能 将EA SP的字送到目的操作数dst中 SP 2 SP 隐含操作 如 POPBX例题 2020 3 23 53 例题 设DS 1000H SS 2000H AX 1A2BH BX 1200H CX 339AH BP 1200H SP 1352H SI 1354H 11350H 0A5H 11351H 3CH 11352H 0FFH 11353H 26H 11354H 52H 11355H 0E7H 126A4H 9DH 126A5H 16H 21352H 88H 21353H 51H 求以下各指令执行后的值 1 POPAXAX SP 答 出栈指令先传送字数据 因为SP 1352H SS 2000H 字地址 SS 10H SP 21352H 所以 AX 5188H 再修改SP SP 2 1354H 2020 3 23 54 3 XCHG指令 指令格式 XCHGdst src指令功能 dstsrc 8位 16位均可如 XCHGAX BXXCHGCL BX DI 不影响标志位 注意 不能使用段寄存器和立即数 不能在两个存储单元之间进行 2020 3 23 55 3 状态标志传送指令 1 标志位装入寄存器AH指令 2 寄存器AH送标志寄存器指令 3 标志寄存器进栈指令 4 标志寄存器出栈指令 2020 3 23 56 1 标志位装入寄存器AH指令 不影响标志位 指令格式 LAHF指令功能 将标志寄存器的低8位送AH 即 2020 3 23 57 2 寄存器AH送标志寄存器指令 指令格式 SAHF指令功能 将寄存器AH的值送标志寄存器的低字节 即设置SF ZF AF PF和CF的值 2020 3 23 58 3 标志寄存器进栈指令 指令格式 PUSHF指令功能 SP 2 SP 将16位标志寄存器的值入栈 不影响标志位 2020 3 23 59 4 标志寄存器出栈指令 指令格式 POPF指令功能 先将EA SP所指内存的字送标志寄存器 SP 2 SP 标志位发生变化 2020 3 23 60 1 加法运算指令 1 加法指令ADD 2 带进位加法指令ADC 3 加1指令INC 4 压缩的BCD码加法调整指令DAA 5 非压缩的BCD码加法调整指令AAA 2020 3 23 61 2 减法指令 1 减法指令SUB 2 带借位的减法指令SBB 3 减1指令DEC 4 求补指令NEG 5 比较指令 6 压缩BCD码减法调整指令DAS 7 非压缩BCD码减法调整指令AAS 2020 3 23 62 3 乘法指令 1 无符号数乘法指令MUL 2 带符号数乘法指令IMUL 3 非压缩BCD码乘法调整指令 2020 3 23 63 4 除法指令 1 无符号数除法指令DIV 2 带符号数除法指令IDIV 3 字节扩展指令CBW 4 字扩展成双字指令CWD 5 非压缩BCD码除法调整指令AAD 2020 3 23 64 1 加法指令ADD 指令格式 ADDdst src指令功能 dst src dst 所有标志位随运算结果发生变化 如 ADDAX 3A5FH AX 3A5FH AX ADDAL BX 将EA BX的内存单元的 内容 AL AL ADD BX AX 将EA BX的内存内容 AX 该内存单元 2020 3 23 65 2 带进位加法指令ADC 指令格式 ADCdst src指令功能 dst src CF dst 所有标志位随运算结果变化 如 ADCAX BX AX BX CF AX ADCAL BX 将EA BX的内存单元的 内容 AL CF AL ADC BX AX 将EA BX的内存内容 AX CF 该内存单元 例题 2020 3 23 66 例1 设原AL 79H BH 0B3H 求执行指令ADDAL BH后 AL BH 各个标志位的值 解 79H 01111001B B3H 10110011B 00101100B 1 所以 AL 00101100B 2CH BH 0B3H SF 0 ZF 0 AF 0 PF 0 CF 1 OF 0 2020 3 23 67 例2 求两个双字数据相加 假设数据1在DX 高字 和AX 低字 内 为12345678H 数据2在BX 高字 和CX 低字 内 为6789ABCDH 解 因为8086 8088的指令只能进行字 字节运算 所以对于双字必须分两步进行 2020 3 23 68 例2 求两个双字数据相加 数据1在DX 高字 和AX 低字 内 为12345678H 数据2在BX 高字 和CX 低字 内 为6789ABCDH 解 因为8086 8088的指令只能进行字 字节运算 所以对于双字必须分两步进行 第一步 低字和低字相加 ADDAX CX AX 5678H CX ABCDH AX 0245H CF 1 2020 3 23 69 例2 求两个双字数据相加 数据1在DX 高字 和AX 低字 内 为12345678H 数据2在BX 高字 和CX 低字 内 为6789ABCDH 解 第二步 高字和高字相加 同时考虑低字之和向高字进位 ADCDX BX DX 1234H BX 6789H CF 1 DX 79BEH CF 0 所以双字之和是79BE0245H CF 0 2020 3 23 70 例2 求两个双字数据相加 数据1在DX 高字 和AX 低字 内 为12345678H 数据2在BX 高字 和CX 低字 内 为6789ABCDH 解 因此 本题要求的双字相加 由两条指令完成 ADDAX CXADCDX BX 2020 3 23 71 3 加1指令INC 指令格式 INCdst指令功能 dst 1 dst CF不受影响 其他标志位随运算结果变化 如 INCAX AX 1 AX INCCL CL 1 CL INC BX 将EA BX的内存单元内容 1 该内存单元 2020 3 23 72 4 压缩的BCD码加法调整指令DAA 指令格式 DAA指令功能 对AL中的压缩BCD数加法结果自动调整 分两种情况进行 当AL低4位 9或AF 1时 AL 06H AL 1 AF 当AL的高4位 9或CF 1时 AL 60H AL 1 CF 例题 2020 3 23 73 例题 已知两个压缩BCD码AL 38H和BL 24H 对其求和 解 第一步ADDAL BL38BCD 00111000B 24BCD 00100100B 01011100B 5CH 62BCD 显然 执行加法指令与实际结果不符合 2020 3 23 74 例题 解 第二步DAA 注意隐含操作 只对AL进 行调整 01011100B 5CH 则低4位 9 0110B 06H 01100010B 62H即为62BCD 所以 对于压缩BCD码 在进行加法运算后 必须紧跟一条调整指令DAA 以保证计算结果正确 2020 3 23 75 例题 已知两个压缩BCD码AL 38H和BL 24H 对其求和 解 因此 对两个压缩BCD码进行加法 需要如下两条指令完成 ADDAL BLDAA 对AL进行调整 2020 3 23 76 5 非压缩的BCD码加法调整指令AAA 指令格式 AAA指令功能 对AL中的两个非压缩BCD码加法结果进行调整 使之成为正确的结果 对于非压缩BCD码 在进行加法运算后 必须紧跟一条调整指令AAA 以保证运算结果的正确性 2020 3 23 77 1 减法指令SUB 指令格式 SUBdst src指令功能 dst src dst 例如 SUBAX 3A5FH AX 3A5FH AX SUBAL BX 将AL EA BX 的内存 单元的内容 AL ADD BX AX 将EA BX的内存内容 AX 该内存单元 2020 3 23 78 2 带借位的减法指令SBB 指令格式 SBBdst src指令功能 dst src CF dst 2020 3 23 79 3 减1指令DEC 指令格式 DECdst指令功能 dst 1 dst 2020 3 23 80 4 求补指令NEG 指令格式 NEGdst指令功能 0 dst dst 例如 NEGAX 设原AX 1122H 执行指令后AX 0 1122H AX 0EEDEH 2020 3 23 81 5 比较指令CMP 指令格式 CMPdst src指令功能 dst src 影响标志位 注意 目的操作数不发生变化 如 CMPAH 00H AH与0比较 结果影响标志位 CMPAX BX AX与EA BX的内存单元的字 比较 结果影响标志位 2020 3 23 82 6 压缩BCD码减法调整指令DAS 指令格式 DAS指令功能 对AL中两个压缩的BCD码相减后的结果进行调整 类似DAA 2020 3 23 83 7 非压缩BCD码减法调整指令AAS 指令格式 AAS指令功能 对AL中两个非压缩BCD码相减的结果进行调整 类似DAA 2020 3 23 84 1 无符号数乘法指令MUL 指令格式 MULsrc指令功能 src AL AX src是字节数据 src AX DX AX src是字数据 如 MULBL BL AL AXMULBX BX AX DX AXMULBYTEPTR SI 将EA SI的内存单元的 内容 AL AX注意隐含操作 2020 3 23 85 2 带符号数乘法指令IMUL 指令格式 IMULsrc指令功能 当参加运算的数据是带符号数时 用此命令 所有指令功能与MUL相同 2020 3 23 86 3 非压缩BCD码乘法调整指令 指令格式 AAM指令功能 对AX内两个非压缩BCD码相乘结果进行调整 2020 3 23 87 1 无符号数除法指令DIV 指令格式 DIVsrc指令功能 两个无符号数相除 src是字节数据 AX src AL 商 AH 余数 src是字数据 DX AX src AX 商 DX 余数 2020 3 23 88 2 带符号数除法指令IDIV 指令格式 IDIVsrc指令功能 两个带符号数相除 src是字节AX src AL 商 AH 余数 src是字DX AX src AX 商 DX 余数 2020 3 23 89 3 字节扩展指令CBW 指令格式 CBW指令功能 将AL扩展到AX 为除法指令做准备 当AL的最高位是0 则AH 00H 当AL的最高位是1 则AH 0FFH 2020 3 23 90 4 字扩展成双字指令CWD 指令格式 CWD指令功能 将AX扩展到DX AX 为除法指令做准备 当AX的最高位是0 则DX 0000H 当AX的最高位是1 则DX 0FFFFH 2020 3 23 91 5 非压缩BCD码除法调整指令AAD 指令格式 AAD指令功能 对AX中非压缩BCD码的被除数进行调整 保证结果正确 在除法指令DIV前 2020 3 23 92 例题 设DS 1000H SS 2000H AX 1A2BH BX 1200H CX 339AH BP 1200H SP 1352H SI 1354H 11350H 0A5H 11351H 3CH 11352H 0FFH 11353H 26H 11354H 52H 11355H 0E7H 126A4H 9DH 126A5H 16H 21350H 88H 21351H 51H 求以下各指令执行后的值 1 ADD SI CX 11354H 11355H SF ZF CF OF 答 EA SI 1354H DS 1000H 内存单元的字地址 1000 10H 1354H 11354H 该内存单元的字 0E752H 而 CX 339AH 2020 3 23 93 例题 答 该内存单元的字 E752H CX 339AH 1AECH CF 1 所以执行指令后 11355H 1AH 11354H 0ECH 同时 因为执行加法指令后最高位 0 所以 SF 0 ZF 0 又因为这是两个不同符号的数相加 故 OF 0 2020 3 23 94 例题 根据以下要求 写出指令 把BX寄存器的内容和DX寄存器的内容相加 结果存入BX寄存器中 答 ADDBX DX 用寄存器BX和SI的基址变址寻址方式把存储器中一个字节与AL寄存器的内容相加 并把结果送回到AL中 答 ADDAL BX SI 或ADDAL BX SI 2020 3 23 95 例题 根据以下要求 写出指令 用寄存器BX和位移量0B2H的寄存器相对寻址方式 把存储器中的一个字和CX相加 并把结果送回到存储器中 答 ADD 0B2H BX CX 用位移量0524H的直接寻址方式把存储器中的一个字与立即数3C5AH相加 并把结果送回到该存储单元中 答 ADD 0524H 3C5AH 2020 3 23 96 例题 写出执行以下计算的指令序列 其中X Y Z R W均为存放16位带符号数单元的地址 Z W Z X 解 MOVAX X 将EA X的内存字数据送入AXSUB Z AX 将EA Z的内存字数据减AX后 再送回该内存 MOVAX W 将EA W的内存字数据送AXADD Z AX 求得结果 2020 3 23 97 1 与 运算指令AND 指令格式 ANDdst src指令功能 dst src dst 对源操作数和目的操作数按位进行 与 运算 影响标志位 AF无定义 CF 0 其他视具体情况 如 ANDAL 80H AL 80H AL ANDAX BX 将EA BX的内存单元的字 内容 AX AX 2020 3 23 98 2 或 运算指令OR 指令格式 ORdst src指令功能 dst src dst 对源操作数和目的操作数按位进行 或 运算 影响标志位 AF无定义 CF 0 其他视具体情况 如 ORAL 01H AL 01H AL ORAX BX 将EA BX的内存单元的字 内容 AX AX 2020 3 23 99 3 非 运算指令NOT 指令格式 NOTdst指令功能 dst dst对目的操作数按位进行 非 运算 不影响标志位 如 NOTAL AL AL NOTWORDPTR BX 将EA BX的内存单元 的字按位求反后送回 该内存单元 2020 3 23 100 4 异或 运算指令XOR 指令格式 XORdst src指令功能 dst src dst 对源操作数和目的操作数按位进行 异或 运算 影响标志位 AF无定义 CF 0 其他视具体情况 如 XORAX AX AX清零 2020 3 23 101 5 测试指令TEST 指令格式 TESTdst src指令功能 dst src 对源操作数和目的操作数按位进行 与 运算 影响标志位 AF无定义 CF 0 其他视具体情况 但结果不改变目的操作数 如 TESTAL 80H 测试D7 1 2020 3 23 102 1 逻辑移位指令 LogicalShift 无符号数 逻辑移位的特点是移出的位进入进位位CF 空出的位用 0 填入 逻辑左移指令SHL指令格式 SHLdst count指令功能 Count 1 直接写入指令 大于1时 应送入CL预先设定 如 SHLAX 1SHLAL CL 2020 3 23 103 1 逻辑移位指令 逻辑右移指令SHR指令格式 SHRdst count指令功能 Count 1 直接写入指令 大于1时 应送入CL预先设定 如 SHLAX 1SHLAL CL 2020 3 23 104 2 算术移位指令 ShiftArithmetic 带符号数 算术左移指令SAL指令格式 SALdst count指令功能 与逻辑左移指令功能完全相同 Count 1 直接写入指令 大于1时 应送入CL预先设定 2020 3 23 105 2 算术移位指令 算术右移指令SAR指令格式 SARdst count指令功能 最高位保持不变 其他各位右移 Count 1 直接写入指令 大于1时 应送入CL预先设定 2020 3 23 106 循环左移指令ROL指令格式 ROLdst count指令功能 3 循环移位指令 Count 1 直接写入指令 大于1时 应送入CL预先设定 2020 3 23 107 3 循环移位指令 循环右移指令指令格式 RORdst count指令功能 Count 1 直接写入指令 大于1时 应送入CL预先设定 2020 3 23 108 4 通过进位位循环移位指令 通过进位位循环左移指令RCL指令格式 RCLdst count指令功能 Count 1 直接写入指令 大于1时 应送入CL预先设定 2020 3 23 109 4 通过进位位循环移位指令 通过进位位循环右移指令指令格式 RCRdst count指令功能 Count 1 直接写入指令 大于1时 应送入CL预先设定 2020 3 23 110 例题 MOVAL 08HSHLAL 1MOVBL ALMOVCL 2SHLAL CLADDAL BL 08H AL AL逻辑左移一位 AL 10H 相当于AL 2 AL BL 2 CL AL算术左移两位 AL 40H 相当于AL 8 AL BL AL 整个过程相当于08 10 1 以下指令序列 请问实现了什么功能 2020 3 23 111 例题 MOVCL 04HSHLDX CLMOVBL AHSHLAX CLSHRBL CLORDL BL 04H CL DX逻辑左移4位 相当于DX 低4位清零 DX 0H AH BL AX逻辑左移4位 相当于AX低4位 清零 AX 0H BL逻辑右移4位 相当于AH 0 H 现DL的高4位是原来DL的低4位 现DL的低4位是原AH的高4位 所以 本程序段完成将DX AX组成的双字逻辑左移4位 2 试分析下面的程序段完成什么功能 2020 3 23 112 例题 3 编制一个程序段 实现CX中的数除以4 结果仍旧放回CX中 解 假设CX内是无符号数 程序段如下 MOVAX CXMOVCL 02HSHRAX CLMOVCX AXHLT 2020 3 23 113 第三章作业1 P793 1 3 5 4 5 6 7 9 3 10 1 2020 3 23 114 第三章作业2 17 1 3 5 18 2 4 19 2020 3 23 115 1 控制转移指令的寻址方式 指令执行顺序是由代码段寄存器CS和指令指针寄存器IP确定的 执行顺序程序时 BIU 总线接口部件 每取一字节指令 IP就自动加1 指向下一指令字节 实现程序的顺序控制 控制转移类指令的目的就是通过改变CS IP 从而实现对程序流向的控制 程序转移分为两类 1 段内转移 2 段间转移 3 寻址方式 2020 3 23 116 2 无条件转移指令 指令格式 JMPdst指令功能 使程序无条件地转移到dst指明的目的地址去执行 通常dst用符号表示 不影响标志位 如 JMPshortHEY 转移到目标地址HEY处 IP被修改了 128 127 JMPABC 转移到目标地址ABC处 IP被修改了 逻辑段内 NEAR可省略 2020 3 23 117 3 条件转移指令 条件转移指令是根据上一条指令执行后的标志位的状态来决定程序是否转移 当条件成立时 便转向指令中给出的目标地址 当条件不成立时 程序按顺序执行 指令格式 Jccdst8指令功能 当转移条件cc成立时 转移到目的地址去执行 否则按顺序执行 不影响标志位 转移条件cc 2020 3 23 118 根据转移条件cc分类 1 以标志位的状态作为转移条件 2020 3 23 119 根据转移条件cc分类 2 用CMP 或SUB 指令来比较两个数的大小 无符号数若X Y 则CF 0 且ZF 0 JAdst A即Above 若X Y 则CF 1 且ZF 0 JBdst B即Below 2020 3 23 120 根据转移条件cc分类 2 用CMP 或SUB 指令来比较两个数的大小 带符号数若X Y 则SF OF 0 且ZF 0 JGdst G即Greaterthan 若X Y 则SF OF 1 且ZF 0 JLdst L即Lessthan 例题 2020 3 23 121 例题 1 分析下列程序段 程序转向哪里 ADDAX BXJNOL1JNCL2SUBAX BXJNCL3JNOL4JMPSHORTL5 AX B568H BX 54B7H 2020 3 23 122 例题 解 第一步 ADDAX BXAX B568H1011010101101000BX 54B7H0101010010110111AX 0A1FH0000101000011111所以 CF 1 OF 0第二步 JNOL1 OF 0 满足条件 转去L1执行 2020 3 23 123 例题 1 分析下列程序段 程序转向哪里 ADDAX BXJNOL1JNCL2SUBAX BXJNCL3JNOL4JMPSHORTL5 AX 42C8H BX 608DH 2020 3 23 124 例题 解 第一步 ADDAX BXAX 42C8H0100001011001000BX 608DH0110000010001101AX A355H1010001101010101所以 CF 0 OF 1第二步 JNOL1 OF 1 不满足条件 顺序执行第三步 JNCL2 CF 0 满足条件 转去L2执行 2020 3 23 125 例题 2 编写一段指令序列 测试AL的内容 若低4位全为0 就转移去NEXT执行程序 否则按顺序执行 解 TESTAL 0FHJZNEXT NEXT 2020 3 23 126 4 循环控制指令 循环指令的作用是控制某程序段反复执行多次 指令格式 LOOPdst8指令功能 CX 1 CX 若CX 0 就转去dst循环执行程序 若CX 0 顺序执行后续程序 不影响标志位 实际上 该指令可以等价两条指令 DECCX CX 1 CXJNZdst ZF 0 转向dst执行例题 2020 3 23 127 例题 3 请编写指令序列 确定AL中 1 的个数 解 XORAH AH 累加器清零MOVCX 08H 设置循环次数Stat ROLAL 1 AL循环左移1位 即AL 的最高位送CFJNCLp CF 0 转移到LpINCAH CF 1 AH 1 AHLp LOOPStat CX 1 CX CX 0 返回到Stat执行HLT 程序段结束 2020 3 23 128 4 过程调用和返回指令 程序设计时 往往把某些具有独立功能的程序编写成独立的程序模块 称之为子程序 可以方便地供其他程序调用 1 调用指令指令格式 CALLdst 子程序名 指令功能 无条件地转移去执行子程序 2 返回指令指令格式 RET指令功能 在子程序结尾处必须有这条指令 保证子程序结束后返回原断点 2020 3 23 129 1 段内转移 段内转移又称近转移 NEAR 指明在同一段的转移 此时只需修改IP寄存器的值 SHORT 指明在同一段内更短距离的转移 8位 128 127 2020 3 23 130 2 段间转移 段间转移又称远转移 FAR 指明要转到另一个逻辑段执行程序 其转移地址由新的段基址CS和偏移地址IP组成 2020 3 23 131 3 控制转移指令的寻址方式 相对寻址 把当前IP值增加 或减少 某一值 绝对寻址 以新的值完全取代当前的IP值 段内直接寻址 段内间接寻址 段间直接寻址 段间间接寻址 绝对寻址 相对寻址 2020 3 23 132 段内直接寻址 这种寻址方式的转移指令 直接给出一个相对位移量 指令转向的有效地址为当前IP寄存器内容和指令中给出的8位或16位位移量之和 即 IP IP 位移量 若位移量为8位 则为短转移 short 因为位移量是相对于当前的IP值来计算的 所以段内直接寻址又称相对寻址 2020 3 23 133 段内间接寻址 这种寻址方式 指令转向的有效地址是由指令中指定的一个16位通用寄存器或一个字存储单元的内容提供 以直接取代IP寄存器的内容 2020 3 23 134 段间直接寻址 在这种寻址方式中 指令中直接给出了转向目标的段基址和段内偏移地址 发生转移时 只要用指令中给出的段基址取代CS寄存器内容 用指令中给出的偏移地址取代IP寄存器的内容 就可完成从一个代码段到另一个代码段的转移 2020 3 23 135 段间间接寻址 在这种寻址方式中 指令中给出一个存储单元地址 用该地址所指的两个相邻字单元的内容 32位 来取代IP和CS中的内容 以达到段间转移的目的 存储单元的地址可以用操作数寻址方式中除立即数寻址方式和寄存器寻址方式以外的任何一种寻址方式取得 2020 3 23 136 1 标志位操作指令 1 进位标志位清零指令 ClearCarryFlag 指令格式 CLC指令功能 0 CF 不影响其他标志位 2 进位标志位置1指令 SetCarryFlag 指令格式 STC指令功能 1 CF 不影响其他标志位 2020 3 23 137 1 标志位操作指令 3 进位标志取反指令 ComplementCarryFlag 指令格式 CMC指令功能 CF CF 不影响其他标志位 2020 3 23 138 1 标志位操作指令 4 方向标志清零指令 ClearDirectionFlag 指令格式 CLD指令功能 0 DF 不影响其他标志位 5 方向标志置1指令 SetDirectionFlag 指令格式 STD指令功能 1 DF 不影响其他标志位 2020 3 23 139 1 标志位操作指令 6 中断标志清零指令 即禁止中断指令 指令格式 CLI指令功能 0 IF 不影响其他标志位 7 中断标志置1指令 即允许中断指令 指令格式 STI指令功能 1 IF 不影响其他标志位 2020 3 23 140 2 与外部事件协调同步的指令 1 暂停指令指令格式 HLT指令功能 使CPU进入暂停状态 2 等待指令指令格式 WAIT指令功能 执行WAIT指令时 CPU每隔5个时钟周期测试一次TEST引脚电平 若为高电平 继续等待 若为低电平 CPU退出等待 顺序执行下一条指令 2020 3 23 141 2 与外部事件协调同步的指令 3 交权指令指令格式 ESC外部操作码 源操作数指令功能 当CPU工作于最大模式时 主CPU要求协处理器完成某种工作 2020 3 23 142 3 空操作指令 指令格式 NOP指令功能 CPU执行NOP指令时 不做任何具体的功能操作 仅占用3个时钟周期的时间 一般用于程序调试和修改时 插在其他指令之间 用于延时 2020 3 23 143 串操作指令 数据串是指存放在存储器中的一组字节 或字 数据 一个数据串的长度最长为64KB 1 串传送 MOVS 2 串比较 CMPS 3 串扫描 SCAS 4 取数据串 LODS 5 存数据串 STOS 和三个重复前缀指令 2020 3 23 144 串操作指令 执行串操作指令时应注意隐含约定和特点

温馨提示

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

评论

0/150

提交评论