历安毛子种枝大学 目录 XIDIAN UNIVERSITY 循环程序设计 微机原理与系统设计 第四章汇编语言指令与程序设计 董明皓 minghao@xidian.edu.cn 2
2 1 汇编语言基本概念 2 3 4 分支程序设计 5 循环程序设计 数据运算指令与程序设计 数据位操作指令与编程 目录 微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 minghao@xidian.edu.cn
历安毛子绑牧大学 4.3.5循环控制指令 XIDIAN UNIVERSITY LOOP LABEL ;(CX)-(CX)-1, ;(CX)≠0时转LABEL LOOPZ/LOOPE LABEL ;(CX)←-(CX)-1, (CX)≠0且ZF=1时转LABEL LOOPNZ/LOOPNE LABEL (CX)(CX)-1, ;(CX)≠0且ZF=O时转LABEL JCXZ LABEL ;CX=O时转LABEL 循环控制指令的寻址方式均为段内直接转移,而且为短转移方式
4.3.5 循环控制指令 LOOP LABEL LOOPZ/LOOPE LABEL LOOPNZ/LOOPNE LABEL JCXZ LABEL 循环控制指令的寻址方式均为段内直接转移,而且为短转移方式。 ;(CX)←(CX)-1, ;(CX)≠0时转LABEL ;(CX)←(CX)-1, ;(CX)≠0且ZF=1时转LABEL ;(CX)←(CX)-1, ;(CX)≠0且ZF=0时转LABEL ;CX=0时转LABEL
历安毛子代枝大” 4.3.5循环控制指令 XIDIAN UNIVERSITY 1循环程序的构成 >一个标准的循环程序应由以下四部分组成: 初始化准备部分:为循环做准备的,它不在循环体内。 循环工作部分:这部分是循环程序解题所需的核心程序,题 目要完成的功能在此进行。根据题目要求不同,这部分程序 可以很简单,也可以很复杂,甚至是内循环嵌套外循环结构 多重循环程序。 ·参数调整部分:主要用来更新某些数据或修正循环控制的参 数,以保证每次循环所完成的功能不是完全重复的 ·出口判定部分:至少要有一个出口判定,以保证循环程序正 常结束。也有些循环程序有多个出口,程序可以有多个条件 作为循环结束的控制,只要其中一个条件满足即可结束循环。 微机原理与系统设计 第四章汇编语言指令与程序设计 董明皓 minghao@xidian.edu.cn 4
1.循环程序的构成 4.3.5 循环控制指令 微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 minghao@xidian.edu.cn 4 一个标准的循环程序应由以下四部分组成: • 初始化准备部分:为循环做准备的,它不在循环体内。 • 循环工作部分:这部分是循环程序解题所需的核心程序,题 目要完成的功能在此进行。根据题目要求不同,这部分程序 可以很简单,也可以很复杂,甚至是内循环嵌套外循环结构 -多重循环程序。 • 参数调整部分:主要用来更新某些数据或修正循环控制的参 数,以保证每次循环所完成的功能不是完全重复的 • 出口判定部分:至少要有一个出口判定,以保证循环程序正 常结束。也有些循环程序有多个出口,程序可以有多个条件 作为循环结束的控制,只要其中一个条件满足即可结束循环
历些毛子种枚大” 4.3.5循环控制指令 XIDIAN UNIVERSITY ●2.L00P指令 (CX)的内容为设定的循环次数,(CX)-(CX)-1 退出条件:(CX)=O 不影响PSW 其循环结构为: MOV CX,次数 ;循环准备 标号: ;循环体 LOOP标号 “标号”与“LOOP标号”指令之间至多包含128字节(循环控制 指令为短转移指令】
2.LOOP指令 4.3.5 循环控制指令 5 • (CX)的内容为设定的循环次数,(CX)←(CX)-1 • 退出条件:(CX)=0 • 不影响PSW 其循环结构为: MOV CX, 次数 ;循环准备 标号: ;循环体 LOOP 标号 “标号”与“LOOP 标号”指令之间至多包含128字节(循环控制 指令为短转移指令)
历粤毛子代枝大学 4.3.5循环控制指令 XIDIAN UNIVERSITY 2.L00P指令 例:DX:AX中存放32位数,将其扩大16倍 解: MOV CX.4 REP1 SHL AX,1 RCL DX,1 LOOP REP1 “标号”与“LOOP标号”指令之间至多包含128字节(循环控制 指令为短转移指令)
2.LOOP指令 4.3.5 循环控制指令 6 例:DX:AX中存放32位数,将其扩大16倍 “标号”与“LOOP 标号”指令之间至多包含128字节(循环控制 指令为短转移指令) 解 : MOV CX, 4 REP1 : SHL AX,1 RCL DX,1 LOOP REP1
历些毛子种枝大学 4.3.5循环控制指令 XIDIAN UNIVERSITY 3.LOOPZ/LOOPNZ指令 (CX)的内容为设定的循环次数,(CX)-(CX)-1 循环条件:当(CX)≠0且ZF=1(ZF为LOOPZ前方指令执行后 的ZF) 退出条件:(CX)=0或ZF=0 ·不影响PSW 。 适合于在区域中查找不同的“字符” 例如: MOV CX,10 L1:CMP AX,BX;若(AX)BX),即ZF=O,则退出循环 LOOPZ L1 微机原理与系统设计 第四章汇编语言指令与程序设计 葚明皓 minghao@xidian.edu.cn 7
3.LOOPZ/LOOPNZ指令 4.3.5 循环控制指令 7 • (CX)的内容为设定的循环次数,(CX)←(CX)-1 • 循环条件:当(CX)≠0且ZF=1(ZF为LOOPZ前方指令执行后 的ZF) • 退出条件:(CX)=0或ZF=0 • 不影响PSW • 适合于在区域中查找不同的“字符” 例如: MOV CX, 10 L1: CMP AX,BX ;若(AX)≠(BX),即ZF=0,则退出循环 LOOPZ L1 微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 minghao@xidian.edu.cn
历些毛子代枝大” 4.3.5循环控制指令 XIDIAN UNIVERSITY ●4.LOOPZ/LOOPNZ指令 (CX)的内容为设定的循环次数,(CX)-(CX)-1 •循环条件:当(CX)≠0且ZF=0(ZF为LOOPZ前方指令执行后的 ZF) 退出条件:(CX)=0或ZF=1 不影响PSW 适合于在区域中查找指定的“字符” 例如: MOV CX,10 L2:CMP AX,BX;若(AX)=(BX),即ZF=1,则退出循环 LOOPZ L2 微机原理与系统设计 第四章汇编语言指令与程序设计 董明皓 minghao@xidian.edu.cn 8
4.LOOPZ/LOOPNZ指令 4.3.5 循环控制指令 8 •(CX)的内容为设定的循环次数,(CX)←(CX)-1 •循环条件:当(CX)≠0且ZF=0(ZF为LOOPZ前方指令执行后的 ZF) •退出条件:(CX)=0或ZF=1 •不影响PSW •适合于在区域中查找指定的“字符” 例如: MOV CX, 10 L2: CMP AX,BX ;若(AX)=(BX),即ZF=1,则退出循环 LOOPZ L2 微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 minghao@xidian.edu.cn
历安毛子种牧大” 4.3.5循环控制指令 XIDIAN UNIVERSITY ●4.LOOPZ/LOOPNZ指令 例:找到指定字符,找到则自动退出 ;在DS段 masm.exe中有一个位置计数器-$ STRING DB11111211111 (16位),用于指示:汇编程 COUNT EQU $-STRING 序当前执行汇编语句所面向的 ;在CS段 操作单元;本身是一个常数, MOV CX,COUNT 程序中可以引用 MOV SI,-1 L1:INC SI MOV AL,STRING [SI] CMP AL,1' ;影响ZF LOOPZ LI JZ NOFIND ;若ZF=O,跳出LOOPZ,执行该句 NOFIND
4.LOOPZ/LOOPNZ指令 4.3.5 循环控制指令 9 例:找到指定字符,找到则自动退出 ;在DS段 STRING DB ’11111211111’ COUNT EQU $-STRING ;在CS段 MOV CX, COUNT MOV SI,-1 L1:INC SI MOV AL, STRING [SI] CMP AL, ‘1’ ;影响ZF LOOPZ L1 JZ NOFIND ꞏ ;若ZF=0,跳出LOOPZ,执行该句 NOFIND masm.exe中有一个位置计数器-$ (16位),用于指示:汇编程 序当前执行汇编语句所面向的 操作单元;本身是一个常数, 程序中可以引用
历安毛子代枚大学 4.3.5循环控制指令 XIDIAN UNIVERSITY ●5.JCXZ指令 ·退出条件:(CX)=0 ·不影响PSW 。 经常与循环指令配合使用 ·为避免程序空跑:如果循环次数(CX)=0,则要循环65536 次(最大的循环次数) 微机原理与系统设计 第四章汇编语言指令与程序设计 董明皓 minghao@xidian.edu.cn 10
5.JCXZ指令 4.3.5 循环控制指令 10 • 退出条件:(CX)=0 • 不影响PSW • 经常与循环指令配合使用 • 为避免程序空跑:如果循环次数(CX)=0,则要循环65536 次(最大的循环次数) 微机原理与系统设计 第四章 汇编语言指令与程序设计 董明皓 minghao@xidian.edu.cn
三 历安毛子种枝大学 4.3.5循环控制指令 XIDIAN UNIVERSITY ●5.JCXZ指令 例: MOV CX.VARI ;设定循环次数,可能为0 JCXZ DONE ;当(CX)=0时,跳过循环 ;循环准备 L3: ;循环体 LOOP L3 DONE
5.JCXZ指令 4.3.5 循环控制指令 11 例: MOV CX, VAR1 ;设定循环次数,可能为0 JCXZ DONE ;当(CX)=0时,跳过循环 ;循环准备 L3: ;循环体 LOOP L3 DONE: