- 1、本文档共86页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
前章知识回顾 数据传送指令 算术运算指令 逻辑运算和移位指令 处理机控制指令 顺序程序设计方法 1、汇编语言的数据传送、算术运算、逻辑运算及移位和处理机控制四类机器指令的应用和熟练程度? 2、顺序程序的基本特点? 第4章 分支程序设计 本章学习目标 段内寻址与段间寻址 无条件转移指令 条件转移指令 二分支程序设计方法 多分支程序设计方法 4.1 转移指令的寻址方式 4.2 无条件转移指令 4.3 条件转移指令 4.4 分支程序设计方法 4.1 转移指令 的寻址方式 CPU中,程序的运行由代码段寄存器CS和指令指针IP确定。 CPU执行指令后,自动形成下一条指令的地址。但有时需改变程序的流程, 就要给出目标指令的段地址(CS)和偏移地址(IP)值,这就是转移指令的地址。 转移指令的寻址有:段内直接寻址、段内间接寻址、段间直接寻址和段间间接寻址。 4.1.1 段内寻址 段内寻址分为段内直接寻址和段内间接寻址两种方式。转移是在当前代码段64KB范围内进行,因此不需要更改段地址CS的值,只要改变偏移地址IP的值。 1. 段内直接寻址 指令直接给出转移地址的偏移量(8位或16位),CS值保持不变。转移的有效地址为当前IP值与指令中指定的偏移量之和。即: 目标地址IP = IP(当前值)+ 偏移量 8位偏移量称为短转移;16位偏移量称为近转移。短转移指令为2字节,近转移指令为3字节。 例4-1 分析下列指令 JMP SHORT DSP1 ;短转移指令 JMP NEAR PTR DSP2 ;近转移指令 假设两条指令存放地址均为1000H:0200H,偏移量DSP1为 08H,偏移量DSP2为0012H。 短转移指令执行时: 当前IP值 = 0200H + 2 = 0202H 目标地址IP = IP(当前值)+ 偏移量 = 0202H + 08H = 020AH 指令执行后将转向1000H:020AH去执行。 近转移指令执行时: 当前IP值 = 0200H + 3 = 0203H 目标地址IP = IP(当前值)+ 偏移量 = 0203H + 0012H = 0215H 指令执行后将转向1000H:0215H去执行 2. 段内间接寻址 与段内直接寻址方式相同的是:转移目标与转移指令在同一个代码段内,转移指令执行后CS值不变。 与段内直接寻址方式不同的是: 转移的有效地址值存放在16位的通用寄存器或两个连续存储单元中。 例4-2 假设(DS)=2000H,(BX)=3000H, (23000H)=2536H,分析下列指令。 JMP BX 指令执行后,将BX的内容直接赋给IP。所以,(IP)= 3000H JMP WORD PTR[BX] 指令执行后,先计算出存储单元地址23000H,再从该单元中取出内容送给IP。则:(IP)= 2536H 4.1.2 段间寻址 段间寻址分为段间直接寻址和段间间接寻址两种方式。其转移方式是从当前代码段跳转到另一个代码段,因此需要修改段地址CS和偏移地址IP的值。 1. 段间直接寻址 指令中直接给出了转移目标的段地址和偏移地址。只要用指令中指定的偏移地址代替IP寄存器的内容,用指令中指定的段地址代替段寄存器CS的内容就可以完成转移操作。段间直接转移通常叫远转移,指令的操作数须附加FAR PTR操作符。 例4-3 执行如下指令 JMP FAR PTR DSP 假设指令存放地址为: 1000H:0200H,DSP的有效地址为3620H,段地址为2000H。 则指令执行后: (IP)= 3620H,(CS)= 2000H 程序转移到2000H:3620H处继续执行 2.段间间接寻址 与段间直接寻址方式相同的是: 转移目标与转移指令不在同一段内,转移指令执行后CS和IP都发生变化。不同的是: 转移目标的偏移地址和段地址存储在两个连续的字存储单元中。指令执行时,从该存储单元取出第1个字传送到IP,取出第2个字传送到CS,以实现段间转移。 例4-4 执行如下指令 JMP DWORD PTR 6[BX] 假设: (CS)= 1000H,(IP)= 0600H, (DS)= 2000H,(BX)= 1000H, (21006H)= 3000H,(21008H)= 6000H 则指令执行后: (CS)= 6000H,(IP)= 3000H。 程序转移到6000H:3
文档评论(0)