第十一章循环程序设计
第十一章 循环程序设计
第节循环程序基本结构 (1)循环程序组成 程序实例中,我们看到循环程序的特点是程序中含有可以 程序段。循环程序由以下4部分组成 山)例始化部分。程序在进入循环处理 先设立初值,例如循环次 数订数器、工作寄存器以及其它变量的初始值 为进入循环做准备 (②)循环体鄣分。循环体也称为循环处理部分,是循环程序的核心。循环 本用于处理实际的数据,是重复执行部分
第1节.循环程序基本结构 (1) 循环程序组成 从以上循环程序实例中,我们看到循环程序的特点是程序中含有可以 重复执行的程序段。循环程序由以下4部分组成: (1) 初始化部分。程序在进入循环处理之前必须先设立初值,例如循环次 数计数器、工作寄存器以及其它变量的初始值等,为进入循环做准备。 (2) 循环体部分。循环体也称为循环处理部分,是循环程序的核心。循环 体用于处理实际的数据,是重复执行部分
3)循环制部分。在重复执行循环体的过程中,不断修改和判别循环变 量,直到符合循环结束条件。一般情况下,循环控制有以下几种方式 ①计数循环—一如果循环次数已知,用计数器计数来控制循环次数,这 种控制方式用得比较多。循环次数要在初始化部分预置,在控制部分修 改,每循环一次,计数器内容减1。例4.6、例4.7都属于计数循环控制方 ②条件控制循环—一在循环次数未知的情况下,一般通过设立结束条件 来控制循环的结束,例48就是用条件A=0来控制循环结束的。 ③开关量与逻辑尺控制循环——这种方法经常用在过程控制程序设计中 这里不再详述。 (4)循环结東处理。这部分程序用于存放执行循环程序所得结果以及恢复 各工作单元的初值等
(3) 循环控制部分。在重复执行循环体的过程中,不断修改和判别循环变 量,直到符合循环结束条件。一般情况下,循环控制有以下几种方式: ①计数循环——如果循环次数已知,用计数器计数来控制循环次数,这 种控制方式用得比较多。循环次数要在初始化部分预置,在控制部分修 改,每循环一次,计数器内容减1。例4.6、例4.7都属于计数循环控制方 式。 ②条件控制循环——在循环次数未知的情况下,一般通过设立结束条件 来控制循环的结束,例4.8就是用条件A=0来控制循环结束的。 ③开关量与逻辑尺控制循环——这种方法经常用在过程控制程序设计中, 这里不再详述。 (4) 循环结束处理。这部分程序用于存放执行循环程序所得结果以及恢复 各工作单元的初值等
(②2)循环程序的基本结构 循环程序通常有两种编制方法:一种是先处理再判断,另一种是先判断 后处理,如图4.18所示。 开始 开始 初始化 初始化 循处 循坏控制 匚坏处理 循环制 循完底 循环完底 匚西坏束 °图4.18循环程序的两种基本结构 °(a)先执行后判断;(b)先判断后执行
(2) 循环程序的基本结构 循环程序通常有两种编制方法:一种是先处理再判断,另一种是先判断 后处理,如图4.18所示。 • 图4.18循环程序的两种基本结构 • (a)先执行后判断;(b)先判断后执行
第2节循环控制指令 步令和装格#含单我能基态:是实成慢流看 为记 数器,每执行一次循环 )就会自动被减1 机器指令格式 OPCODE(8位)DISP(8位) DISP和条件转移指令中的位移量解释相同,作为相对位移 量,转移范围也是-128到127 执行步骤 1)CX<=(CX)-1 2)若循环条件满足,IP<=(IP)+DISP ●循环条件主要是指(CX)是否为0,如果(CX)=0则停止 循环,不改变程序的执行流程,否则执行流程转移,继续一 循环
第2节 循环控制指令 • 循环指令和转移指令的功能基本一致,都是完成程序流程 的转移,所不同的是循环指令会隐含使用CX寄存器作为记 数器,每执行一次循环指令,(CX)就会自动被减1。 • 机器指令格式: • OPCODE(8位)DISP(8位) • DISP和条件转移指令中的位移量解释相同,作为相对位移 量,转移范围也是-128到127。 • 执行步骤: • 1)CX<=(CX)-1 • 2)若循环条件满足,IP<=(IP)+DISP • 循环条件主要是指(CX)是否为0,如果(CX)=0则停止 循环,不改变程序的执行流程,否则执行流程转移,继续 循环
有些循环指令在循环条件中还加上了对ZF标志的判断 忐位影响:所有转移指令和循环指令都不会影响任何的标志位(虽然 们有时会对标志位的当前取值进行判断 (1)L0OP指令 格式:LOOP目标地址 执行步骤: 1)CX<=(CX)-1 2)如果(CⅩX)≠0,转移到目标地址,否则停止循环,顺序执行下一条 使用前提:在使用LOOP指令控制循环以前(进入程序的循环体以前) 必须把循环次数保存到CX。 2) LOOPZ/ LOOPE指令 格式: LOOPZ/ LOOPE目标地址
有些循环指令在循环条件中还加上了对ZF标志的判断。 标志位影响:所有转移指令和循环指令都不会影响任何的标志位(虽然 它们有时会对标志位的当前取值进行判断) (1)LOOP指令 格式:LOOP目标地址 执行步骤: 1)CX<=(CX)-1 2)如果(CX)≠0,转移到目标地址,否则停止循环,顺序执行下一条 指令 使用前提:在使用LOOP指令控制循环以前(进入程序的循环体以前), 必须把循环次数保存到CX。 (2)LOOPZ / LOOPE指令 格式:LOOPZ / LOOPE目标地址
执行步 )CX<=(CX=1 2)如果(CX≠ OANDZE=1,则转移到目标地址,否则停正循环,顺序 执行下一条指 (3) LOOPNE/ LOOPNZ指令 式: LOOPNE/ LOOPNZ目标地址 执行步骤 斗CX<=(CX)-1 2)如果(CⅩ)≠0 ANDZE=0,则转移到目标地址,否则停止循环,顺序 执行下一条指令 (4)JCXZ指令在循环程序中的作用 进入循环体之前,首先使用JCXZ指令判断(CX)是否为0,如果为0就跳 转到循环体结束的位置,以免执行错误的循环过程
执行步骤: 1)CX<=(CX)-1 2)如果(CX)≠0ANDZF=1,则转移到目标地址,否则停止循环,顺序 执行下一条指令。 (3)LOOPNE / LOOPNZ指令 格式:LOOPNE / LOOPNZ目标地址 执行步骤: 1)CX<=(CX)-1 2)如果(CX)≠0ANDZF=0,则转移到目标地址,否则停止循环,顺序 执行下一条指令。 (4)JCXZ指令在循环程序中的作用 进入循环体之前,首先使用JCXZ指令判断(CX)是否为0,如果为0就跳 转到循环体结束的位置,以免执行错误的循环过程
第3节串操作与重复前缓指令 1,操作指令 操作指念县有 些共同自 引源串必须在当前数据段DS甲,目的串必须在附加数据段ES中,DS 和ES可以重叠 b,源串的偏移首地址必须在S中,目的串的偏移首地址必须在D中。 所有串操作指令均以寄存器间接寻址方式访问操作数 C.每执行一条串操作指令只能完成串中一个字或一个字节的操作 同时自动修改SI和D的内容,以指向串中下一个元素 d.标志位DF决定串操作的方向,是按增量还是按减量 若 DF=0,则按增 节操作时 字操作时加2;若DF=I,则 按减量修改,字节操作时减1,字操作时减2 面依次介绍MOVS、LODS、STOS、CMPS、SCAS等串操作指令 MOVS、LODS、STOS三类指令不影响标志位,CMPS、SCAS两类指 影响标志位
第3节 串操作与重复前缀指令 1.串操作指令 (1)各种串操作指令具有一些共同的特征: a.源串必须在当前数据段DS中,目的串必须在附加数据段ES中,DS 和ES可以重叠。 b.源串的偏移首地址必须在SI中,目的串的偏移首地址必须在DI中。 所有串操作指令均以寄存器间接寻址方式访问操作数。 c.每执行一条串操作指令只能完成串中一个字或一个字节的操作, 同时自动修改SI和DI的内容,以指向串中下一个元素。 d.标志位DF决定串操作的方向,是按增量还是按减量修改。若 DF=0,则按增量修改,字节操作时加1,字操作时加2;若DF=I,则 按减量修改,字节操作时减1,字操作时减2。 下面依次介绍MOVS、LODS、STOS、CMPS、SCAS等串操作指令。 MOVS、LODS、STOS三类指令不影响标志位,CMPS、SCAS两类指令 影响标志位
2)串传送指令 MOVS DOPD, SOPD MOVSB MOVSW 力能:将以S为脂针的源串中的一个字节或字数据传送到以D为指针的目的串中 说明 a,格式 两个操作数,它们是目的串和源串的符号地址,由串定义隐含指出 了串的传送类型 对格式 眀确地指定了串的传送类型为字节与字,不能带操作数,后面 的指令是类似的情况 b.与MOV指令不同,串传送指令允许目的串和源串都是存储器操作数 (3)串装入指令 格式 LODS SOPD LODSB LODSW 功能:将SI所指源串的一个字节或字数据送寄存器AL或AX中 一说明:格式一含有一个源操作数,它隐含说明了源串的类型
(2)串传送指令 格式: 一、MOVS DOPD,SOPD 二、MOVSB 三、MOVSW 功能:将以SI为指针的源串中的一个字节或字数据传送到以DI为指针的目的串中。 说明: a.格式一带有两个操作数,它们是目的串和源串的符号地址,由串定义隐含指出 了串的传送类型。 对格式二、三,明确地指定了串的传送类型为字节与字,不能带操作数,后面 的指令是类似的情况。 b.与MOV指令不同,串传送指令允许目的串和源串都是存储器操作数。 (3)串装入指令 格式: —、LODS SOPD 二、LODSB 三、LODSW 功能:将SI所指源串的一个字节或字数据送寄存器AL或AX中。 说明:格式一含有一个源操作数,它隐含说明了源串的类型
(4)串存储指令 格式 STOS DOPD STOSB STOSW 功能:将寄存器AL或AX中内容存入D所指目的串中的字节或字单元中 说明:与LODS指令相似,只不过这里的操作数是目的操作数罢了 (5)串比较指令 格式: CMPS DOPD, SOPD CMPSB CMPSW 功能:将SI所指源串中的一个字节或字数据与DI所指目的串中相应字节或 字数据进行比较 说明 a对标志位的影响与CMP指令相同。 b串比较指令与一般比较指令有一个重要区别,比较时用源操作数减目的 操作数
(4)串存储指令 格式: —、STOS DOPD 二、STOSB 三、STOSW 功能:将寄存器AL或AX中内容存入DI所指目的串中的字节或字单元中。 说明:与LODS指令相似,只不过这里的操作数是目的操作数罢了。 (5)串比较指令 格式: —、CMPS DOPD,SOPD 二、CMPSB 三、CMPSW 功能:将SI所指源串中的一个字节或字数据与DI所指目的串中相应字节或 字数据进行比较。 说明: a.对标志位的影响与CMP指令相同。 b.串比较指令与一般比较指令有一个重要区别,比较时用源操作数减目的 操作数