- 1、本文档共30页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第四章8086指令系统-5
循环指程序段在一定条件下重复执行。循环指令提供了程序段循环的控制及手段。这些指令都用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,不影响标志位。 * * 第五节 程序转移类指令 1、转移指令 转移指令将正在被执行的指令集的执行点从一处转到另一 处。源地址与目标地址的距离称为跳转“偏移量”,偏移量是符 号数。当用一个字节表示偏移量时,即源地址与目标地址之距 在+127~-128之间,称为“短(short)转移”,当用一个字表示偏移 量时,即源地址与目标地址之距在+32767~-32768之间,称为 “近(near)转移”。 转移指令又可分为两类:无条件转移指令与条件转移指令。 (1) JMP(Jump)无条件转移指令 格式:JMP dest ,dest可以是标号、立即数、寄存器、内存操作数 转移分成两类:段内或段间转移。 无条件转移指令有五种格式: 段内直接短转移 段内直接近转移 段内间接转移 段间直接远转移 段间间接转移 JMP指令的操作:无条件地将控制转移到指令中规定的目的地。 目标地址可以是:直接方式/间接方式给出。 JMP指令不影响标志位。 类型 寻址方式 操作数 目标地址计算 示例 说明 段内转移 直接 地址符号 IP ← IP + 偏移量 CS不变 JMP SHORT NEXT ①SHORT表示短跳; ②FAR表示段间跳; ③DWORD PTR表明内存操作数属性为双字 立即数(偏移量) JMP 2100H 间接 寄存器 IP ← 寄存器 CS不变 JMP BX 存储器 IP ←(存储器) JMP [BX] 段间转移 直接 地址符号 IP ← 目标偏移地址/立即数低16位 CS ← 目标段地址/立即数高16位 JMP FAR PTR NEXT 立即数(32位) JMP 间接 内存(双字) IP ← (EA+1,EA) CS ← (EA+3,EA+2) JMP DWORD PTR [BX] (2)Jcc 条件转移指令 汇编程序设计中常利用条件转移指令来实现分支。 格式:Jcc short-label ;cc代表跳转条件,该指令只能实现段内短转移 操作数必须是短标号。转移范围为:-128~+127 根据单个条件标志的设置情况转移 JZ(JE)/JNZ(JNE),JS/JNS,JO/JNO,JP(JPE)/JNP(JPO), JB(JNAE、JC)/JNB(JAE、JNC) 具体条件转移指令分四种情况讨论: 根据两个无符号数比较结果转移 JB(JNAE、JC)/JNB(JAE、JNC),JBE(JNA)/JNBE(JA) 比较两个带符号数,并根据比较结果转移 JL(JNGE)/JNL(JGE),JLE(JNG)/JNLE(JG) 测试CX的值为零转移 JNC 特征 助记符 转移条件 说明 单 标 志 位 JAE / JNB CF=0 无符 号数 大于等于 或 不小于 转移 JB /JNAE CF=1 小于 或 不大于等于 JC CF=1 有进位或借位 转移 JNC CF=0 无进位/借位 转移 JZ ZF=1 等于转移 JNZ ZF=0 不等于 转移 JNO OF=0 无溢出 转移 JO OF=
文档评论(0)