已阅读5页,还剩118页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
2020 2 14 1 微型计算机原理与接口技术 第三章8086寻址方式和指令系统 熊旺平xiaoxiongxwp 2020 2 14 2 本章内容导读 CPU 8086 的寻址方式CPU 8086 的指令系统 2020 2 14 3 本章学习要求 熟悉8086CPU的指令格式 寻址方式 会计算物理地址 熟悉8086CPU的指令系统 掌握常用的指令的功能 特点 达到会读程序 会编写程序片段的水平 2020 2 14 4 3 18086的寻址方式 指令通常应提供的信息1 做什么操作2 操作数从哪里来3 操作结果放在哪里4 对于调用和转移指令 还要涉及转移或调用地址的提供方式 2020 2 14 5 计算机指令的组成 操作码字段 field 标明计算机要执行什么操作操作数字段 指出指令在执行过程中所需要的操作数 值为多少或者放在什么地方 以及操作结果送到哪里 2020 2 14 6 指令的一般格式 操作数字段可以有 个 一个 二个或三个操作数 通常称为 无操作数 单操作数 双操作数 或 三操作数 指令 2020 2 14 7 指令示例 无操作数指令 STI单操作数指令 INCAX双操作数指令 ADD AX BX 大多数运算型指令都是双操作数指令 对这种指令 有的机器 大中型 使用 三地址 指令 除给出参加运算的两个操作数外 还要指出运算结果的存放地址 源操作数 目的操作数 2020 2 14 8 操作指令 现代微型计算机中多采用二地址指令 两个操作数分别称为 源操作数 和 目的操作数 指令执行后 把运算结果放到目的操作数的地址之中 指令的操作码在机器中的表示比较简单 只要对每一种操作指定相应的二进制代码即可 而指令的操作数字段的情形就比较复杂 2020 2 14 9 寻址方式 定义 1 指令中如何提供操作数或操作数地址的方式称为寻址方式 定义 2 规定如何对地址字段作出解释以找到操作数 程序转移时需提供转移地址 这跟提供操作数地址在方法上没有本质区别 因此也归入寻址方式的范畴 2020 2 14 10 指令系统设计 一个指令系统能够提供哪些寻址方式 能否为编制程序提供方便 这是指令系统设计的关键 需要说明的是 在不同的计算机系统中 寻址方式的名称和分类并不统一 但基本可以归结为以下几种方式或它们的变型或组合 2020 2 14 11 寻址方式的名称和分类 立即寻址 ImmediateAddressing 寄存器寻址 RegisterAddressing 直接寻址 DirectAddressing 寄存器间接寻址 RegisterIndirectAddressing 寄存器相对寻址 RegisterRelativeAddressing 基址变址寻址 BasedIndexedAddressing 相对基址变址寻址 RelativeBasedIndexedAddressing 隐含寻址 ImplicitAddressing I O端口寻址 I OPortAddressing 2020 2 14 12 一 立即寻址方式 指令中直接给出操作数 操作数紧跟在操作码之后 作为指令的一部分存放在代码段里 在取出指令的同时也就取出了操作数 立即有操作数可用 所以称之为立即寻址 2020 2 14 13 Example MOVAL 80H 低地址存储器AXMOVAX 3064H ADDAL 20H ADDAX 0C896H 高地址 目的 源 代码段 2020 2 14 14 Notice 立即数可以为8位 也可以为16位 如果是16位数 则 高位字节存放在高地址中 低位字节存放在低地址中 立即寻址方式常用于给寄存器赋值 并且只能用于源操作数 而不能用于目的操作数 以字母A F开头的数字 前面要加数字0 以免与其他符号相混淆 2020 2 14 15 二 寄存器寻址方式 操作数在寄存器中 指令中指明寄存器号 这种寻址方式叫寄存器寻址 对于8位操作数 寄存器可以是AH AL BH BL CH CL DH DL 对于16位操作数 寄存器可以是AX BX CX DX SI DI SP和BP 2020 2 14 16 Example INCAX MOVAX BX DECAX ROLAH 1 将AH中的内容循环左移一位 2020 2 14 17 Notice 特点 1 操作数就在寄存器中 不需要访问存储器来取得操作数 指令执行时 操作就在CPU的内部进行 因而执行速度快 2 寄存器号比内存地址短在编程中 如有可能 尽量使用这种寻址方式的指令 寄存器寻址方式既可用于源操作数 也可用于目的操作数 还可以两者都用于寄存器寻址方式 如MOVBX AX 源操作数的长度必须与目的操作数一致 2020 2 14 18 3 18086的寻址方式 除以上两种寻址方式外 下面各种寻址方式的操作数均在存储器中 通过采用不同的寻址方式取得操作数地址 从而取得操作数 2020 2 14 19 三 直接寻址方式 在讨论寻址方式时 通常把操作数的偏移地址称为有效地址EA EffectiveAddress EA可通过不同的寻址方式来得到 在直接寻址方式中 指令中直接给出操作数的有效地址 或者说 有效地址EA就在指令中 它 操作数的有效地址 而不是操作数本身 存放在代码段中指令的操作码之后 但操作数一般存放在数据段中 当然 也允许数据存放在数据段以外的其它段 如附加段 此时应在指令中给出 跨越段前缀 2020 2 14 20 Example Notice Example1MOVAX 2000H 其中 DS 3000H 存储器 代码段 数据段 30000H AX 32000H 执行结果 AX 3050H 采用直接寻址方式 如果没有用 段跨越前缀 标明操作数在哪一段 就默认段寄存器为DS 2020 2 14 21 如数据在附加段 扩展段 中 则应指明 段跨越前缀 MOVAX ES 3000H 或ES MOVAX 3000H Example Notice Example2 为了使指令字不要过长 规定双操作数指令不能两个操作数都用直接寻址方式 如 MOV 2000H 3000H 2020 2 14 22 符号地址 符号地址实际上就是给存储单元起一个名字 例 MOVAX AREA1符号地址还是立即数 AREA1EQU0867H MOVAX AREA1 AREA1DW0867H MOVAX AREA1 2020 2 14 23 四 更多寻址方式 2020 2 14 24 直接寻址 DirectAddressing 直接给出操作数的有效地址 EA MOVAX 2000H 寄存器间接寻址方式 RegisterIndirectAddressing 由基址或变址寄存器给出操作数的地址 寄存器中存的不是操作数本身 而是操作数的有效地址 BXSIDIBP DISP 8或16位位移量 默认段基址DS MOVBX SI MOVBX DS BP MOVAX BP MOVBX ES SI 四 更多寻址方式 2020 2 14 25 3 寄存器相对寻址 RegisterRelativeAddressing 基址或变址寄存器与位移量之和给出操作数的有效地址BXSIDI DISPBP DISP MOVBX DISP SI MOVBX DS DISP BP MOVAX DISP BP MOVBX ES DISP SI 四 更多寻址方式 2020 2 14 26 基址变址寻址 BasedIndexedAddressing 由一个基址寄存器 BX或BP 和一个变址寄存器 SI或DI 的内容之和给出有效地址BX SIBP SIBX DIBP DI MOVAX BX SI MOVBX BP DI 四 更多寻址方式 2020 2 14 27 相对基址变址寻址 RelativeBasedIndexedAddressing 由一个基址寄存器 BX或BP 和一个变址寄存器 SI或DI 的内容之和再加上位移量给出有效地址BX SI DISPBP SI DISPBX DI DISPBP DI DISP MOVAX DISP BX SI MOVBX 200H BP DI MOVAX DISP BP SI 四 更多寻址方式 2020 2 14 28 方括号用法总结 立即数可出现在方括号内寄存器中只有BX BP SI DI可出现在方括号内 其中BX BP不允许出现在同一个 SI DI也不可 方括号有相加的含义 以下表示等价 6 BX SI BX 6 SI BX SI 6 若方括号内有BP 则隐含使用SS来提供段基址 其他情况均隐含使用DS来提供段基址 2020 2 14 29 五 其它寻址方式 2020 2 14 30 五 其它寻址方式 作业 2020 2 14 31 3 28086的指令系统 计算机执行各种操作的命令称为指令 一台计算机所能执行的全部操作称为指令系统 它们是汇编语言的基础 按功能 可以分为以下六类 串操作指令转移指令处理器控制指令 数据传送指令算术运算指令逻辑运算和移位指令 下面将介绍各种寻址方式的具体应用以及六大类指令的格式 功能和应用实例 2020 2 14 32 一 数据传送指令 2020 2 14 33 1 通用数据传送指令 1 MOV传送指令 MOVE 指令格式 MOVOP1 OP2 OP1 OP2 reg sreg reg reg为通用寄存器reg sreg sreg为段寄存器mem reg sreg mem为存储器reg imm imm为立即数mem imm 指令功能 将源操作数传送到目的操作数 2020 2 14 34 注意 邻居可互传数据 箭头无交叉点 源和目的操作数不能同为存储器 目的操作数不允许用立即数方式 也不允许用CS寄存器 不能将立即数直接传送到段寄存器 不能在两段寄存器间直接传送数据 源和目的操作数的数据位应等长 即同为字节或字 MOV指令不影响状态标志位 2020 2 14 35 MOV60H ALMOV BX SI MOVCS AXMOVBX IPMOVDS ESMOVCX AL 立即数不能做目的操作数 存储器皆不能直接传送 CS不能做目的操作数 通用寄存器无IP寄存器 段寄存器间不能直接传送 源和目的操作数长度不一致 下列用法正确吗 2020 2 14 36 练习1 用MOV指令实现两内存字节单元内容的交换 2035H 2045H 方法一 用直接寻址方式实现MOVBL 2035H MOVCL 2045H MOV 2045H BLMOV 2035H CLHLT 2020 2 14 37 练习1 用MOV指令实现两内存字节单元内容的交换 2035H 2045H 方法二用寄存器间接寻址方式实现MOVSI 2035HMOVDI 2045HMOVAH SI MOVAL DI MOV 2035H ALMOV 2045H AH 2020 2 14 38 应用举例 DATASEGMENT 数据段开始AREA1DB14H 3BHAREA2DB3DUP 0 ARRAYDW3100H 01A6HSTRINGDB GOOD DATAENDS 数据段结束 例 MOVAX DATAMOVDS AX 2020 2 14 39 应用举例 例 MOVDX OFFSETARRAY将ARRAY的偏移地址送到DX寄存器中 OFFSET为属性操作符 例 MOVAL AREA1 AL AREA1中的14HMOVAREA2 AL 0002H单元 14H 2020 2 14 40 练习2 把数据块BLOCK1移到BLOCK22040H2060H把2040H地址开始的10个字节数据移到2060地址开始的10个字节单元处 2020 2 14 41 练习2 把2040H地址开始的10个字节数据移到2060地址开始的10个字节单元处 START MOVSI 2040HMOVDI 2060HMOVCX 0AHLOOP1 MOVBL SI 09H MOV DI 09H BLDECSIDECDIDECCXJNZLOOP1HLT 2020 2 14 42 思考题 把2040H地址开始的10个字节单元的内容与2060H地址开始的10个字节单元内容互换 2020 2 14 43 1 通用数据传送指令 2 PUSH进栈指令PUSHSRC SRC表示源操作数regsregmemimm 2020 2 14 44 1 通用数据传送指令 3 POP出栈指令POPDST DST表示目的操作数regsreg CS除外 mem 2020 2 14 45 PUSH1 先修改SP的值 使SP SP 22 将源操作数压入堆栈中的SP指示的位置上 SP 1 SP SRC POP1 DST SP 1 SP2 修改SP的值 使SP SP 2 1 通用数据传送指令 2020 2 14 46 1 通用数据传送指令 先进后出的原则PUSHBXPUSHAXPOPAXPOPBX 2020 2 14 47 1 通用数据传送指令 4 XCHG交换指令XCHGOP1 OP2reg regmem regreg mem把一个字或字节的OP1和OP2相交换 例 AX 2000H DS 3000H BX 1800H 31A00H 2004HXCHGAX BX 200H 2020 2 14 48 练习 用XCHG指令改进前面的数据块交换程序 MOVBL SI 09H XCHGBL DI 09H MOV SI 09H BL 2020 2 14 49 1 通用数据传送指令 5 换码指令XLAT Translate 主要用于对表格的访问 实现代码转换 执行XLAT指令之前 将表的首地址BX某一项与表首址的位移量 距离 ALXLAT结果 在AL中得到该项的内容 MOVBX OFFSETTABLEMOVAL 05HXLAT 在AL中得到 5 的对应代码HLT 查表得AL 12H 2020 2 14 50 2 输入输出指令3 地址传送指令4 标志传送命令 微机原理与应用 2020 2 14 51 二 算术运算指令 2020 2 14 52 二 算术运算指令 本组指令可处理的四种类型的数无符号二进制整数8位或16位二进制数带符号二进制整数8位或16位二进制数 用补码表示 原码 反码 补码 可参见汇编程序设计或周明徳教材无符号压缩十进制整数 PackedDecimal 可以在一个字节中存放两个BCD码十进制数无符号非压缩十进制整数 UnpackedDecimal 只在一个字节的低半字节存放一个十进制数 高半字节为全零 2020 2 14 53 二 算术运算指令 4种类型数的表示方法 2020 2 14 54 1 二进制加法和减法指令 名称格式操作加法ADDDST SRCDST SRC DST带进位加法ADCDST SRCDST SRC DST CF减法SUBDST SRCDST DST SRC带借位减法SBBDST SRCDST DST SRC CF标志 ODITSZAPC所有状态标志都受影响 2020 2 14 55 Example 编写实现下列二进制运算的程序段W X Y 24 Z X Y Z均为字变量 MOVAX XADDAX YADDAX 24SUBAX ZMOVW AX 2020 2 14 56 2 加1减1和比较指令 名称格式操作加1INCOPROPR OPR 1减1DECOPROPR OPR 1求补 Negate NEGOPROPR OPR比较CMPOPR1 OPR2OPR1 OPR2标志 INC和DEC ODITSZAPC NEG和CMP 2020 2 14 57 NEG指令 NEG指令把操作数当成一个带符号数 如果原操作数是正数 NEG指令则将其变成负数 用补码表示 如果原操作数是负数 用补码表示 NEG指令则将其变成正数 方法 各位 包括符号位 求反 末位加1 2020 2 14 58 Example 若AL 00010001B 17 执行NEGAL后 AL 11101111B 17 补若AL 11010001B 47 补 执行NEGAL后 AL 00101111B 47 2020 2 14 59 比较指令 比较指令实际上是做减法 但不回送相减的结果 只是根据结果置标志 通常 把CMP指令安排在条件转移指令 如JZ JG JO等 之前 例 如果X 50 转移到TOO HIGH 如果带符号减法X Y引起溢出 则转移到OVERFLOW 否则 计算X Y 并将结果存放在RESULT中 其中 X Y RESULT均为字变量 2020 2 14 60 程序段 下述程序段使用了前面介绍的几条指令 也用到了后面即将介绍的条件转移指令 MOVAX X 将 X 移入AXCMPAX 50 比较JGTOO HIGH 如果 X 大于50 则转向TOO HIGHSUBAX Y 否则减去 Y JOOVERFLOW 溢出则转移JNSNONNEG NEGAX NONNEG MOVRESULT AX 无溢出 取绝对值 并将结果存入RESULT TOO HIGH OVERFLOW 2020 2 14 61 3 符号扩展指令 名称格式操作将字节扩展成字CBW将AL的符号位扩展到AH将字扩展成双字CWD将AX的符号位扩展到DX标志 所有的标志位都不受影响 P89 3 4 2020 2 14 62 4 乘法指令 1 带符号乘法 格式 IMULSRC 所执行的操作 字节操作数 AX AL SRC 字操作数 DX AX AX SRC 乘积带符号 并符合一般代数符号规则 2 无符号乘法 格式 MULSRC 所执行的操作 同IMUL 但操作数和乘积均不带符号 2020 2 14 63 5 除法指令 带符号除法 格式 IDIVSRC 所执行的操作 字节除数 AL AX SRC 之商AH AX SRC 之余数字除数 AX DX AX SRC 之商DX DX AX SRC 之余数商和余数是带符号的 商的符号符合一般代数符号规则 余数的符号与被除数相同 无符号除法 格式 DIVSRC 所执行的操作 与IDIV相同 但操作数 商和余数均是无符号的 2020 2 14 64 标志位 标志 ODITSZAPCIMUL UUUUXMUL UUUUXIDIVU UUUUUDIVU UUUUUX 根据结果设置U 无定义 不影响 2020 2 14 65 二进制四则混合算术运算程序段 试计算 AX V X Y Z 540 X之商DX余数 其中 X Y Z V均为字变量 2020 2 14 66 PROGRAM MOVAX X IMULY MOVCX AX MOVBX DX MOVAX Z CWDADDCX AX ADCBX DX SUBCX 540 SBBBX 0 MOVAX V CWD SUBAX CX SBBDX BX IDIVX X Y 结果在DX AX中将乘积存在BX CX中将符号扩展后的Z加到BX CX中的乘积上从BX CX中减去540从符号扩展后的V中减去 BX CX 并除以X 商在AX中 余数在DX中 V X Y Z 540 X 2020 2 14 67 6 BCD数运算指令 所谓BCD数 就是二进制编码的十进制数 BinaryCodedDecimal 它是用4位二进制码表示一位十进制数 0000 1001是合法BCD码 1010 1111是非法BCD码 压缩BCD数 用一个字节表示2位BCD数例 37非压缩BCD数 用一个字节的低4位表示一位BCD数 高4位为0 例 37 2020 2 14 68 1 压缩BCD数十进制调整原理 例1 18 7 2500011000 18 00000111 700011111 1111是非法BCD码 需要对结果进行变换 调整 方法 加6调整 00011111 0000011000100101 25 正确结果 D3位向D4位 低半字节向高半字节 有进位 AF 1 2020 2 14 69 1 压缩BCD数十进制调整原理 在非法BCD码上 加6 产生向高一位数字的进位 加法器实际上是按二进制运算 满16进一 但进到了BCD数的高位 进1当10 少6 可见 在BCD码结果中 只要一位BCD数字所对应的二进制码超过9 1010 1111 就应 加上6 产生进位 进行调整 这可由软件 调整指令 来完成 2020 2 14 70 1 压缩BCD数十进制调整原理 例219 8 2700011001 19 00001000 800100001 21 结果不对 运算时 低位数字向高位数字产生进位 AF 1或CF 1 实际上是 满16进一 但进到高位 当成了10 少6 需 加6调整 00100001 0000011000100111 27 结果正确 可见 在BCD数运算时 若AF 1 或CF 1 就需在低4位 或高4位 上进行 加6调整 2020 2 14 71 BCD数十进制调整规则 BCD数加法十进制调整规则 如果两个BCD数字相加的结果是一个在1010 1111之间的二进制数 或者有向高一位数字的进位 AF 1或CF 1 则应在现行数字上加6 0110B 调整 BCD数减法十进制调整规则 1 AF 1 表示低位向高位有借位 低位要进行 6调整 2 CF 1 表示高位向高字节有借位 高位要进行 6调整 2020 2 14 72 2 压缩BCD数十进制调整指令 DAA DecimalAdjustforAddition 加法调整指令 如果AL的低4位是A F 或者AF标志为1 则AL AL 6 且使AF 1 如果AL的高4位是A F 或者CF标志为1 则AL AL 60H 且使CF 1 DASDecimalAdjustforSubtraction减法调整指令 如果AL的低4位是A F 或者AF标志为1 则AL AL 6 且使AF 1 如果AL的高4位是A F 或者CF标志为1 则AL AL 60H 且使CF 1 标志 ODITSZAPCU 2020 2 14 73 计算BCD3BCD1 BCD2 其中 BCD1 BCD2 BCD3定义为字变量 可分别存放4位数字的压缩BCD数 假定 BCD1 1834 BCD2 2789 指出执行每条指令的操作及执行指令后AL AF CF的内容 2020 2 14 74 BCD3 BCD1 BCD2 即1834 2789 4623 2020 2 14 75 2 压缩BCD数十进制调整指令 8086没有组合BCD数的乘法和除法调整指令 主要原因是相应的调整算法比较复杂 所以 8086不支持组合BCD数的乘除法运算 如果要处理组合BCD数的乘除法问题 可以把操作数 组合BCD数 变换成相等的二进制数 然后用二进制算法进行运算 运算完成后再将结果转换成BCD数 2020 2 14 76 3 非压缩十进制数调整指令 加法调整指令 AAA 减法调整指令 AAS 乘法调整指令 AAM 除法调整指令 AAD 2020 2 14 77 3 非压缩十进制数调整指令 AAA非压缩BCD码加法调整指令 调整操作是 如果AL的低4位是A F 或者AF标志为1 则AL AL 6 AH AH 1 且使AF 1 清除AL的高4位 CF AF AAS非压缩BCD码减法调整指令 调整操作是 如果AL的低4位是A F 或者AF标志为1 则AL AL 6 AH AH 1 且使AF 1 清除AL的高4位 CF AF 2020 2 14 78 3 非压缩十进制数调整指令 AAM非压缩BCD码乘法调整指令 调整操作是 AH AL 10的商 AL AL 10的余数AAD非压缩BCD码除法调整指令 调整操作是 AL 10 AH AL AH 0 2020 2 14 79 三 逻辑运算和移位指令 2020 2 14 80 微机原理与应用 逻辑运算 2020 2 14 81 Notice 逻辑运算指令按位操作 除NOT不影响标志位 其余指令将使CF OF 0 影响SF ZF PF NOT指令常用来将某个数据取反 TEST和AND指令执行同样的操作 但TEST不回送操作结果 而仅仅影响标志位 它可测试某些位 AND指令使操作数的某些位被屏蔽 OR指令常用来对一些指定位置1 XOR指令常用在是某个寄存器清零或使某些位变反 2020 2 14 82 逻辑移位 把操作数作为无符号数进行移位 右移时 最高位补0 左移时 最低位补0 算术移位 把操作数作为有符号数进行移位 右移时 最高位保持不变 左移时 最低位补0 移位指令 2020 2 14 83 移位指令 微机原理与应用 2020 2 14 84 移位指令的用途和注意事项 用来改变数据格式 有时用来提供程序控制功能 例如根据移位后的CF状态作JC或JNC转移 或一些专门的运算功能 注意 左移n位与乘以2n等效 例如 6 22 00000110 100 00011000同样 右移n位与除以2n等效 如果是逻辑右移 除法是无符号的 如果是算术右移 则除法是带符号的 保持最高位不变 并做符号的扩展 循环移位指令仅影响CF和OF其他移位指令影响CF OF PF SF ZF 2020 2 14 85 Example 编程实现将AL中的数乘以10 求10 x SALAL 1 将AL中数左移1位 得2xMOVBL AL 2x保存在BL中 MOVCL 2 移位次数送入CLSALAL CL 2x左移2位 得8xADDAL BL 2x加上8x AL中为10 x 2020 2 14 86 四 字符串处理指令 2020 2 14 87 字符串的传送MOVS 格式 MOVSB或MOVSW功能 将一个字节 字从DS SI拷贝到ES DI并自动修改SI和DI在使用MOVS指令进行字符串传送时 要注意传送方向 其方向标志的作用如下页图所示 如果源字符串与目标字符串不重迭 如图 a 则传送方向没有任何影响 如果源字符串与目标字符串部分重迭 如图 b 和 c 则传送方向要特别注意 2020 2 14 88 2020 2 14 89 STOS STOS指令是把累加器AL AX中的内容存到内存中去如果使用了重复前缀 则可以方便地使内存的某一区域初始化为某一数值 以字节或字为单位 即顺利地完成块的填充 2020 2 14 90 SCAS 格式 SCASB或SCASW功能 SCAS指令是用来从目标串中查找某个关键字 要求查找的关键字应事先置入AX或AL寄存器中 SCAS指令的操作是将AX AL寄存器中的关键字减去由DI所指向的目标串中一个元素 不传送结果 只根据结果置标志位 修改DI寄存器内容指向下一元素 通常在SCAS指令之前加重复前缀REPNE REPNZ 用来从目标串中寻找关键字 操作一直进行到ZF 1或CX 0为止 2020 2 14 91 2020 2 14 92 重复前缀 REPCX 0时重复REPZ REPECX 0且ZF 1时重复REPNZ REPNECX 0且ZF 0时重复 2020 2 14 93 CMPS 格式 CMPSB或者CMPSWCMPS指令是用来将源串的一个元素减去目标串中相对应的一个元素 不回送结果 只根据结果特征置标志 并修改SI和DI内容指向下一元素 通常在CMPS指令前加重复前缀REPE REPZ 用来寻找两个串中的第一个不相同数据 2020 2 14 94 CMPS 例如 检验一段被传送过的数据是否与源串完全相同 程序如下 2020 2 14 95 五 控制转移指令 2020 2 14 96 在86系列系统中 程序的寻址是由CS和IP两部分组成的 为了使程序转移到一个新的地址去执行 或者改变CS和IP 即改变段和偏移量 或者仅改变IP 即改变偏移量 都可以达到这个目的 其中 前者称为段间转移或段间调用 可用FAR来表示 这时需要将目标标号的段基址和偏移地址分别置入CS和IP中 后者称为段内转移或段内调用 可用NEAR来表示 这时只需将目标标号的偏移地址置入IP寄存器中 2020 2 14 97 为了进一步节省目标码的长度 对于很短距离内的段内转移 一128一十127 86系列把它进一步分别开来 称为短转移 用SHORT来表示 无论是段内转移还是段间转移 都还有直接和间接转移之分 直接转移 就是转移的目标地址信息直接出现在指令的机器码中 间接转移 就是转移的目标地址信息间接存储于某一个寄存器中或某一个内存变量中 当通过寄存器间接转移时 因为寄存器只能是16位的 所以只能完成段内间接转移 2020 2 14 98 转移地址的寻址方式 一个汇编语言程序的代码可能包含多个代码段CS1 CS2 转移可能涉及一个代码段 也可能涉及多个代码段 一个代码段 1 段内直接寻址 2 段内间接方式多个代码段 3 段间直接寻址 4 段间间接方式 2020 2 14 99 无条件转移JMP 无须判断任何条件 跳转到标号指定的的指令格式如下 2020 2 14 100 1 段内直接寻址 段内直接寻址方式也称为相对寻址方式 转移的目标地址是当前IP内容和一个8位或16位的位移量之和 这个位移量是指令代码的一部分 所以叫相对寻址 位移量是8位时 称为短转移 这种寻址方式适用于条件转移或无条件转移 但条件转移指令只能有8位的位移量 机器指令中的位移量由汇编或编译程序根据目标地址和转移指令的距离计算得出 汇编指令只需给出符号地址即可 2020 2 14 101 1 段内直接寻址 JMPNEARPTRADD1 ADD1为一符号地址 处于代码段内 2020 2 14 102 2 段内间接方式 这种方式也是在段内 其转移的目标地址是寄存器或存储单元的内容 即以寄存器或存储器单元内容来更新IP的内容 所以是绝对偏移量 若目标地址为存储单元内容 则该存储单元本身可由上述与存储器操作数有关的任何寻址方式寻址 只是它里面的内容为新的IP值 2020 2 14 103 2 段内间接方式 JMPBX BX的内容为新的EA值 送给IP寄存器 JMPWORDPTR BP TABLE BP内容加位移量TABLE的值作为堆栈段中偏移量 该存储器字的内容作为新的IP值 IP寄存器新的值 IP寄存器新的值 2020 2 14 104 3 段间直接寻址 用于段间转移 目标地址的段基值 CS 和偏移地址 IP 都是指令码的组成部分 用来更新当前CS和IP JMPFARPTRNEXTADD NEXTADD是另一段的符号地址 2020 2 14 105 4 段间间接方式 当前CS和IP由存储器中连续的两个字更新 低位地址的字更新IP 高位地址的字更新CS 存放新IP和CS的存储单元地址由前述存储器操作数的寻址方式决定 JMPDW0RDPTR INTER BX 取DS段中偏移为INTER BX处的双字作为新的CS和IP 2020 2 14 106 2020 2 14 107 计算段内转移地址有两种方法 一种是把当前的IP值增加或减少某一个值 也就是以当前指令为中心往前或往后转移 称为相对转移 另一种是以新的值完全代替当前的IP值 称为绝对转移 在86系列中 所有的段内直接转移都是相对转移 所有的段内间接转移和段间转移都是绝对转移 由于相对转移指令及其目标地址是相对于该指令本身而言的 因而适用于与位置无关 即动态浮动 的程序 这种程序中 相对转移指令及其目标都在同一段中 并一起浮动 JMP指令具有所有这些转移地址的功能 CALL和RET指令没有短转移的功能 2020 2 14 108 条件转移指令 条件转移指令是根据执行该指令时CPU标志的状态而决定是否发生控制转移的指令 所有条件转移指令完成的都是短距离相对转移 因此适用于与位置无关的程序 如果转移距离超过短距离范围 则必须使用两级跳转才能达到目的 第1类和第2类是测试各种标志的组合 其中 第1类是为无符号数设计的 第2类是为带符号数设计的 这两类条件转移指令前面都要求是一条SUB或CMP指令 第3类是测试单个标志 2020 2 14 109 循环控制指令 循环控制指令LOOP也是短距离相对转移指令 可用来控制软件循环的重复过程 LOOP指令用CX寄存器作为计数器 它首先使CX减l 若减1后不为0 则转移到目标地址 否则就执行LOOP指令之后的指令 XORAX AXMOVCX 0L INCAXLOOPL 2020 2 14 110 6 处理器控制指令 1 对标志位操作指令标志操作指令的作用是分别用来置位或复位进位标志 方向标志 中断允许标志 2020 2 14 111 在这些指令中 没有直接置位和复位单步执行标志位TF的指令 如果要对TF标志位进行操作 应该先用PUSHF指令将标志寄存器的内容压入堆栈 在堆栈中设定TF位的值 然后再从堆栈中弹回标志寄存器 2020 2 14 112 2 同步指令 1 WAIT指令 使CPU进入等待状态 每隔5个时钟周期 测试一次86系列芯片上的了TEST状态 直到TEST线上的信号变为有效为止 WAIT指令与ESC指令联合使用 提供了一种存取8087 数值协处理器 数值的能力 2 ESC指令的作用是不用修改处理机就可以扩充86系列的指令集 该指令中的外部操作码是外部协处理机的操作码 它是一个6位的立即数 由汇编程序将其编入这条指令的机器码中 3 LOCK指
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络安全小卫士课件设计
- 2025 年大学应用化学(化学实验)试题及答案
- 新会计法考试题及答案
- 新版中级职称会计试题及答案
- 新版计算机单招考试试题四川及答案
- 时间序列分析试题(卷)与答案解析
- 村官考试试题及答案完整版
- 校园安全教育主题班会3篇
- 森林火灾急救考试题及答案
- 水利行政执法资格考试题库及答案(完整版)
- 知道网课《气的世界-太极健康探秘(上海中医药大学)》课后章节测试答案
- 数据中心电磁兼容屏蔽施工方案
- 家电维修管理咨询报告
- 材料作文“运动场上的风采”(2023年陕西省中考满分作文11篇附审题指导)
- 双循环背景下浙江跨境电商企业核心竞争力的困境及对策研究
- 诊断学内镜检查课件
- 集邮的教学课件
- 玉米加工过程自动化与智能化方案
- 国际音标标准表及教学使用指南
- 膝关节骨性关节炎阶梯治疗
- (2025年标准)重症治疗协议书
评论
0/150
提交评论