第03章 8086的指令系统D.pptVIP

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第03章 8086的指令系统D

3.4.5 控制转移指令 控制转移指令用来改变程序的执行顺序,执行转移就是将目的地址传送给代码段寄存器CS与指令指针寄存器IP。如果跳转目的地与被转移点在同一代码段,称为“段内转移”,此时,只需指明目标地址的有效地址(16位)。如果跳转目的地与被转移点不在同一代码段,称为“段间转移”,此时,需知道目标地址的段地址(16位)及有效地址(16位)。 控制转移指令的寻址方式分为“直接寻址”、“间接寻址”两种。如果指令中直接给出目标地址,如地址标号或立即数(偏移量,目标与源之间的偏移距离),称为“直接寻址”;如果指令中,给出目标地址存放地的地址,如寄存器或内存地址,称为“间接寻址”。 控制转移指令包括:转移指令、循环控制指令、过程调用指令和中断指令等4类。 1 转移指令 转移指令将正在被执行的指令集的执行点从一处转到另一处。 源地址与目标地址的距离称为跳转“偏移量”,偏移量是符号数。 当用一个字节表示偏移量时,即源地址与目标地址之距在+127~-128之间,称为“短(short)转移”; 当用一个字表示偏移量时,即源地址与目标地址之距在+32767~-32768之间,称为“近(near)转移”。 转移指令又可分为两类: 无条件转移指令 条件转移指令 无条件转移指令JMP 格式:JMP dest 说明: dest可以是标号、立即数、寄存器、内存操作数。 (2) 条件转移指令 格式:Jcc short-label 说明: cc代表跳转条件,该指令只能实现段内短转移。 【例】比较两个字属性的符号数X,Y的大小,如果XY,AL为1,如果X=Y,AL为0,如果XY,AL为0FFH。 解:设X、Y为内存变量,功能实现主要代码如下: MOV AX,X CMP AX,Y JLE LE MOV AL,1 ;X Y,AL=1 JMP DONE LE:JL L MOV AL,00H ;X = Y,AL=00H JMP DOWN L:MOV AL,0FFH ;X Y,AL=0FFH DONE:HLT 2 循环控制指令 循环指程序段在一定条件下重复执行。 循环指令提供了程序段循环的控制及手段。这些指令都用CX寄存器作为循环次数计算器,表示某程序段最大循环次数,且循环体每执行一次,CX被减去1。 8086/8088CPU规定被循环的程序段必须在同一段内,且长度不能大于256字节。 循环控制指令有3条:循环指令LOOP、相等循环指令LOOPE/LOOPZ、不相等循环指令LOOPNE/LOOPNZ。 【例】有一首地址为Array的长度为M字数组,试编写实现下列功能的代码:统计出数组中0元素的个数,并存入变量total中。 MOV CX,M ;数组长度存入循环计数器CX MOV total,0 ;计数变量初始值为0 MOV SI,0 ;初始偏移量送寄存器SI AGAIN:MOV AX,Array[SI] ;取数 CMP AX,0 ;与0比较 JNZ NEXT ;不为0,取下一个数 INC total ;为0,计数器加1 NEXT:ADD SI,2 ;调整地址,指向下个数 LOOP AGAIN ;进入下一轮循环 显然,LOOP AGAIN指令的功能与下列语句相同: DEC CX JNZ AGAIN 但是,LOOP指令中完成的操作CX←CX-1,不影响标志位。 3 过程调用和返回指令 如果有一些程序需要在不同的地方多次出现,则可以将这些程序段设计成过程(即子程序),供需要时调用。 在过程(即子程序)中要安排返回指令,使得过程结束时,返回到调用处。 如: 显示一个字符,需要利用下列程序段完成: 过程与调用程序在同一段内,称“段内调用”; 过程与调用程序不在同一段内,称“段间调用”。 过程调用指令为:CALL 返回指令为:RET 过程调用与返回指令均不影响标志位,但影响堆栈。 过程调用的寻址方式 直接寻址 调用指令中直接给出被调用过程的首地址(标号或立即数)。 间接寻址 预先把被调用过程的地址存于寄存器或内存,调用指令仅给出这些地址存放处(寄存器名或内存地址),为“间接寻址”。 返回指令 RET 例:显示某内存区域字符的内容 data segment STR DB ABCDEFGHIJK N EQU $-STR ;串长 data

文档评论(0)

yan698698 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档