循环程序设计
上机实验07 循环程序设计
知识提要:
本节主要对循环结构的组成及其设计方法加以介绍,其知识要点有:
1、循环程序的基本结构通常由3部分组成
-
- 初始化部分
建立循环初始值,为循环做准备,如设置地址指针,(BX/SI/DI/BP),初始化循环控制变量或计数器(CX),数据寄存器(AX/DX)初值等.
-
- 循环体
循环体是循环程序的主体,是程序中重复执行的程序段.它是由循环工作部分、修改部分、和循环控制部分。
①循环工作部分:完成程序功能的主要程序段,用于执行程序的实际任务;
②修改部分:对循环参数进行修改,并为下一次循环做准备;
③循环控制部分:判断循环结束条件是否满足。通常判断循环结束方法:
- 用计数控制循环;循环是否进行了预定的次数。
- 用条件控制循环。循环终止条件是否满足。
3)结束处理处理部分
主要是对循环的结果进行处理。也可没有此部分。
2、循环控制指令:
指令格式 | 执行操作 | 循环结束条件 |
LOOP标号 | CX=CX-1;若CX=0,则循环 | CX=0 |
LOOPNZ/LOOPNE 标号 | CX=CX-1;若CX=0且ZF=0,则循环 | CX=0或ZF=0 |
LOOPZ/LOOPE标号 | CX=CX-1;若CX=0且ZF=1,则循环 | CX=0或ZF=1 |
JCXZ 标号 | 仅测试(CX)=0,若是,则转移到目标地址,否则就顺序执行 |
|
3、循环控制可以分为:计数循环和条件循环。作为计数循环,一般是指循环次数是已知的情况,在程序设计的的循环时,先应将循环次数送入计数器CX中进行计数,在循环体中使用LOOP等循环指令。当然,也可以通过其他方式来进行,如cx←cx-1,jnz 等结合实现。
一、实验要求和目的
1.了解汇编语言循环程序设计的基本流程;
2.熟悉汇编语言循环基本指令的使用方法;
3.掌握利用汇编语言的循环指令完成循环程序设计方法。
二、软硬件环境
1.硬件环境:微机CPU 486以上,500MB以上硬盘,32M以上内存;
2.软件环境:装有MASM 5.0、DEBUG、LINK和EDIT等应用程序。
三、实验涉及的主要知识单元
熟练使用循环指令和跳转等指令来实现循环,理解循环体结构中的初始化部分、循环体、结束部分。能结合前面分支结构相关的知识点,完成对循环结构的理解和掌握。
同时对循环结构中地址指针的设置,(BX/SI/DI/BP),初始化循环控制变量或计数器(CX)和数据寄存器(AX/DX)初值的设置方法等。
循环程序设计示例:
设VARY中有一组8位的符号数,编程统计其中 正数、负数、零的个数,分别存 VM、VN、VK变量中。
分析:设定此数组的元素匀为字节数据,则数组VARY中的数据个数用CNT EQU $-VARY求出,则循环次数为CNT次。在程序中,要将CNT的值送入CX中。将数组VARY中元素挨个与0比较,利用状态标志寄存器中的ZF位求出零的个数,利用SF位求出正、负数的个数。
具体程序设计sy07_1.ASM:
stack segment para stack
dw 20H dup(0)
stack ends
data segment
vary db 23h,78h,56h,0abh,00h,0cdh,59h,14h,98h,0efh,00h,0c0h
cnt equ $-vary
vm db ?
vn db ?
vk db ?
data ends
code segment
assume cs:code,ds:data,ss:stack
start: mov ax,data
mov ds,ax
mov bx,0
mov dl,0
lea si,vary
mov cx,cnt
lop1:
cmp byte ptr[si],0
je zero
js lop2
inc bh
jmp next
lop2:
inc bl
jmp next
zero:
inc dl
next:
inc si
loop lop1
mov vm,bh
mov vn,bl
mov vk,dl
mov ah,4ch
int 21h
code ends
end start
四、实验内容与步骤
1、实验内容
(1)单步运行调试上面程序sy07_1.ASM, 给程序的语句加上注释;
(2)编写程序,计算数组ARRAY中各数的和(参看书上P364例10-1)。程序保存为sy07_2.ASM;
(3)编写程序,统计字符串STRING中大写字母的个数(参看书上P366例10-2)。程序保存为sy07_3.ASM;
五、实验要求与提示
1、实验要求
编写好程序好,单步运行一下,观察各语句运行的情况,掌握各比较指令、循环指令、跳转指令的功能和用法。
2、实验提示
(1)计算字符串长度中字符串应以$结尾;
(2)要用计数控制,则应知道循环次数,用CNT EQU $-ARRAY来进行;若数据类型是字,则循环次数还应除以2。
3、作业提交
把完成后的sy07_1.ASM、sy07_2.ASM、sy07_3.ASM提交。
1.实验截图