版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章循环与分支程序设计学习目标:了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。§5.1循环程序设计一、循环程序的结构形式二、循环程序设计三、多重循环程序设计一、循环程序的结构形式结束初始化控制条件Y循环体N修改部分先判断,后循环一、循环程序的结构形式初始化循环体修改部分Y控制条件N结束先循环,后判断prognam
segmentassume
cs:prognamstart:movrotate:ch,4movcl,4rolbx,clmoval,blandal,0fhaddal,30hcmpal,3ahjlprintitaddal,7hprintit:mov
dl,almov
ah,2int
21hdec
chjnz
rotatemov
ah,4chint
21hprognam
endsend
start例5.2
在ADDR单元存放着数Y的地址,试编制一程序把Y中1的个数存入COUNT单元中开始1的个数计数器←0循环次数计数器CX←16Y左移一次CF=1NY1的个数计数器+1NCX
←CX-1=0YCOUNT
←1的个数计数器结束
循环次数固定,完全由循环计数器控制SEGMENTDW
1234HDATAYADDR
COUNT
DATA
CODEDW
YDB
?ENDSSEGMENTASSUME
CS:CODE,DS:DATAMOV
AX,DATAMOV
DS,AXMOV
DL,0MOV
BX,ADDRMOV
AX,[BX]MOV
CX,16START:REPEAT:SHL
AX,1JNC
NEXTINC
DLNEXT:
LOOP
REPEATEXIT0:
MOV
COUNT,DLMOV
AH,4CHINT
21HCODE
ENDS♦♦♦♦♦♦♦♦♦END
START例5.2开始1的个数计数器←0循环次数计数器CX←161的个数计数器+1结束NNCX
←CX-1=0YCOUNT
←1的个数计数器Y=0NY左移一次YCF=1
Y例5.2SEGMENTDW
1234HDATAYADDR
COUNT
DATA
CODEDW
YDB
?ENDSSEGMENTASSUME
CS:CODE,DS:DATAMOV
AX,DATAMOV
DS,AXMOV
DL,0MOV
BX,ADDRMOV
AX,[BX]MOV
CX,16START:REPEAT:♦♦♦♦♦♦♦♦♦CMP
AX,0JZ
EXIT0SHL
AX,1JNC
NEXTINC
DLCODE
ENDSEND
START例5.2NEXT:
LOOJPMRPERPEPAETAT
EXIT0:
MOV
COUNT,DLMOV
AH,4CHINT
21H例在附加段中,有一个首地址为LIST和未经 排序的字数组。在数组的第一个字中,存放 着该数组的长度,数组的首地址已存放在DI 寄存器中,AX寄存器中存放着一个数。要求 编制一程序:在数组中查找该数,如果找到 此数,则把它从数组中删除。循环程序设计del_ul
proc
nearcldpush
dimov
cx,es:[di]add
di,2repne
scaswje
deletepop
dijmp
short
exitdelete:jcxz
dec_cntnext_el:mov
bx,ex:[di]mov
es:[di-2],bxadd
di,2loop
next_eldec_cnt:pop
didec
word
ptr
es:[di]exit:retdel_up
endp例5.4将正数N插入一个已升序排列的字数组的正确位置该数组的首地址和末地址分别为ARRAY_
HEAD和ARRAY_
END,其中所有的数均为正数。解法一:从数组的尾部开始比较N较大,则在比较对象后插入,结束循环N较小,则把比较对象及其后元素后移一 个字循环结束的控制:♦执行插入操作后结束循环若N比所有元素都小,扫描整个数组后仍无法结束循环,将-1加 在数组前可解决该问题32DHE
♦
E-
A2D3,
37,
49,N15,2♦
-
23♦,
3
37,
49,15,2
2,将N放在K的位置修改地址K后移一个字单元结束开始(ARRAY_HEAD-2)←-1初始化变址寄存器SIYK<=NN例5.4Datareaxsegmentdw
?Array_head
dw3,5,15,23,37,49dw
105dw
32endssegmentArray_endnDatareaProgramassumecs:program,ds:datareaStart:mov
ax,datareamov
ds,axmov
ax,n♦♦♦mov
array_head-2,mov
si,0♦♦Insert:
mov♦♦array_end[si+2],axmov
ah,4chint
21hProgram
ends♦end
start例5.4Comp:♦cmpovarbrxa,ya_rernady[_sein]d,[asxi]♦
cmp
bjxl,eaixnsert♦
jle
imnosvebrxt,array_end[movarray_end[si+2],bxsub
si,2jmp
comp例5.4将正数N插入一个已升序排列的字数组的正确位置。该数组的首地址和末地址分别为ARRAY_
HEAD和
ARRAY_
END,其中所有的数均为正数。解法二:从数组的头部开始比较N较小,则在比较对象前插入,结束循环N较大,则把比较对象及其前元素前移一循环结束的控制:♦个字可扫描整个数组,循环次数为数组元素个数执行插入操作后结束循环若N比所有元素都小,形成新的头;若N比所有元素都大,则被 置于尾部例5.4
例5设有数组X(X1,…,X10)和Y(Y1,…,Y10),编程计算数组Z
(Z1,…,Z10),其中:Z1
=
X1
+
Y1
Z2
=
X2
+
Y2
Z3
=
X3
-
Y3
Z4
=
X4
-
Y4
Z5
=
X5
-
Y5
Z6
=
X6
+
Y6
Z7
=
X7
-
Y7
Z8
=
X8
-
Y8
Z9
=
X9
+
Y9Z10
=
X10
+
Y10datarea
segmentx
dwx1,x2,x3,x4,x5,x6.x7,x8,x9,x10y
dwy1,y2,y3,y4,y5,y6,y7,y8,y9,y10logic_rule
dw
00dchdatareaprognamassumeendssegmentcs:prognam,ds:datareastart:mov
ax,datareamov
ds,axmov
bx,0mov
cx,10mov
dx,logic_rulenext:movshrz
dw
z1,z2,z3,z4,z5,z6,z7,z8,z9,z10
jcax,x[bx]dx,1subtractax,y[bx]addjmp
short
resultsubtract:subresult:movaddax,y[bx]z[bx],axbx,2loop
nextmovintah,4ch21hprognamendsend
start例5.5试编制一程序:从键盘输入一行字
符,要求第一个键入的字符必须是空格符, 如不是,则退出程序;如是,则开始接收
键入的字符并顺序存放在首地址为BUFFER的缓冲区中(空格符不存入),直到接收到第二个空格符时退出程序。datareabufferflagdatareaprognamassumesegmentdb
80
dup(?)db
?endssegmentcs:prognam,ds:datareastart:mov
ax,datareamov
ds,axlea
bx,buffermov
flag,0next:
movintah,0121htest
flag,01hjnz
followcmp
al,20hjnz
exitmov
flag,1jmp
nextfollow:
cmp
al,20hjz
exit
mov
[bx],alinc
bxjmp
nextexit:
mov
ah,4chint
21hprognam
endsend
start三、多重循环程序设计例5.7有一个首地址为A的N字数组,请编制程序使该数组中的数按照从大到小的次序整序➢冒泡法从第一个元素开始,依次对相邻的两个元素进行比较,使前一个元素不大于后一个元素;将所有元素比较完之后,最大的元素排到了最后;然后,除掉最后一个元素之外的元素依上述方法再进行比较,得到次大的元素排在后面;如此重复,直至完成就实现元素从小到大的排序➢这需要一个双重循环程序结构冒泡法的排序序号数比
较遍
数123413232161582851615815316158161641583232325885
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度房产代持合同范本与房产拆分3篇
- 2024版全新协议延期合同下载
- 2024版会场布置合同
- 石板瓦施工方案
- 天津2025年天津美术学院招聘硕士研究生及以上工作人员22人笔试历年典型考点(频考版试卷)附带答案详解
- 河北薄膜温室施工方案
- 事故应急预案的启动与执行流程考核试卷
- 2025至2030年中国传动泵曲轴后齿轮数据监测研究报告
- 西亭小区课程设计
- 栅格课程设计
- 付款通知确认单
- 汽机油管道安装方案指导
- 2022年中国城市英文名称
- 语言规划课件
- 下肢皮牵引护理PPT课件(19页PPT)
- 电 梯 工 程 预 算 书
- 参会嘉宾签到表
- 形式发票格式2 INVOICE
- 2.48低危胸痛患者后继治疗评估流程图
- 人力资源管理之绩效考核 一、什么是绩效 所谓绩效简单的讲就是对
- 山东省医院目录
评论
0/150
提交评论