




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、思考思考: : 下面的代码段完成什么功能?下面的代码段完成什么功能? MOV CX,20 MOV CX,20 LAST:MOV AL,SI LAST:MOV AL,SI MOV ES:DI,AL MOV ES:DI,AL INC SI INC SI INC DI INC DI DEC CX DEC CX JNZ LAST JNZ LAST 第第6章章 循环程序设计循环程序设计6.1 6.1 循环结构程序设计循环结构程序设计 一、循环结构程序概述一、循环结构程序概述 在程序中,在程序中,凡能有规则重复执行的程凡能有规则重复执行的程序段称作循环序段称作循环。 包含循环程序段的程序称为循环结构包含循
2、环程序段的程序称为循环结构程序。程序。1 1、循环程序的组成、循环程序的组成循环的初始状态:循环的初始状态:设置一些初值,如设置一些初值,如设寄存器、计数器的初值等。设寄存器、计数器的初值等。循环体:循环体:工作部分。工作部分。循环控制部分:循环控制部分:控制循环的结束。控制循环的结束。2 2、循环程序的结构形式:、循环程序的结构形式:循环初始化循环初始化 循环控制条件循环控制条件循环体循环体循环初始化循环初始化循环体循环体循环控制条件循环控制条件Y YN NY Y 6.2 循环指令循环指令指指令令 指指令令格格式式 操操作作数数说说明明 指指令令功功能能说说明明 LOOP LOOP (cx)
3、 (cx)-1,(cx0),循循环环 LOOPZ LOOPZ LOOPE LOOPE (CX) (CX)-1,(CX0), ZF=1, 循循环环 LOOPNZ LOOPNZ LOOPNE LOOPNE (CX) (CX)-1,(CX0), ZF=0, 循循环环 JCXZ JCXZ 均均为为短短标标号号 范范围围: (-128127)+2 即即: -126129 (CX)=0, 转转 这些指令对状态标志位都没影响这些指令对状态标志位都没影响.两个条件必须同时成两个条件必须同时成立,才继续循环立,才继续循环动画动画(CX)-1 CX循环次数循环次数CX循环体循环体(CX)=0?YNLOOPE/LO
4、OPZZF=1?YN(CX)-1 CX循环次数循环次数CX循环体循环体(CX)=0?YNLOOP操作图操作图ZF=0?LOOPNE/LOOPNZ例例1 1:在屏幕上显示:在屏幕上显示1010行行 “how do you dohow do you do”, 程序名程序名: exa.asm: exa.asm例例2 2:求:求1N1N自然数的和,结果存在自然数的和,结果存在 X X字字单元。单元。程序如下:程序如下: MOV AXMOV AX, 0 0 MOV CX MOV CX, N NDONEDONE:ADD AXADD AX,CXCX LOOP DONE LOOP DONE ; ;和它等价的指
5、令是?和它等价的指令是? MOV XMOV X,AXAX思考题:思考题:1.1.下列描述错误的是下列描述错误的是_。A ALOOPLOOP指令指令以以CXCX为循环控制计数器为循环控制计数器 B. B. LOOPNELOOPNE指令循环的条件是指令循环的条件是CXCX0 0且且ZF=0 ZF=0 C. C. LOOPELOOPE指令循环的条件是指令循环的条件是CXCX0 0且且ZF=1 ZF=1 D. D. LOOPELOOPE指令循环的条件是指令循环的条件是CXCX0 0且且ZF=0ZF=02.2.下列指令中不能构成循环条件的是下列指令中不能构成循环条件的是()。()。 A. JMP B.
6、JNZ A. JMP B. JNZ C. LOOP D. DEC CX C. LOOP D. DEC CX 例题例题3 3:在一首址为:在一首址为ARYARY,长度为,长度为2020的字符串查找的字符串查找字符字符“* *”,如果找到,则将,如果找到,则将字节字节单元单元RESULTRESULT清清0 0,否则为否则为 -1-1。 MOV BX , -1 MOV RESULT,-1 ;假设没找到假设没找到 MOV CX,20 MOV AL,*DONE:INC BX CMP AL,ARYBX LOOPNE DONE JNZ END1 MOV RESULT,0END1: HLTWHILEWHILE
7、结构的循环控制伪指令的格式为:结构的循环控制伪指令的格式为: . .WHILE WHILE 条件表达式条件表达式 循环体循环体 .ENDW.ENDW UNTILUNTIL结构格式为:结构格式为: .REPEAT.REPEAT 循环体循环体 .UNTIL .UNTIL 条件表达式条件表达式 UNTILUNTIL结构还有一种格式:结构还有一种格式: .REPEAT.REPEAT 循环体循环体 .UNTILCXZ .UNTILCXZ 条件表达式条件表达式 ;cxcx-1 ;cxcx-1,直到,直到cx=0cx=0或条件为真或条件为真下面代码段完成的功能?下面代码段完成的功能? XOR AX, AX
8、MOV CX,100 .WHILE CX!=0 ADD AX,CX DEC CX .ENDW MOV SUM , AX Mov cx,100 .repeat add ax,cx dec cx .until Mov cx,100 .repeat .untilcxz6.3 6.3 串操作指令串操作指令包括包括串传送、存取、比较、扫描串传送、存取、比较、扫描等等操作操作. . 利用串操作指令可以直接处理利用串操作指令可以直接处理两个存储两个存储器操作数器操作数,方便地处理字符串或数据块。,方便地处理字符串或数据块。串指令的特点串指令的特点(1 1)指令格式)指令格式串指令可以显式地带有操作数,也可以
9、使串指令可以显式地带有操作数,也可以使用隐含格式。如串传送指令用隐含格式。如串传送指令MOVSMOVS,可以有以下,可以有以下几种格式:几种格式:显式:显式:MOVS DST, SRCMOVS DST, SRC隐式:隐式:MOVSBMOVSB; ;字节传送字节传送 MOVSWMOVSW; ;字传送字传送 MOVSDMOVSD; ;双字传送双字传送(2 2)操作数)操作数串指令可以处理串指令可以处理累加寄存器累加寄存器和和存储器操作存储器操作数数。对于存储器操作数应先建立地址指针:。对于存储器操作数应先建立地址指针: 若为若为源操作数源操作数,则必须把,则必须把源串首地址放入源串首地址放入SIS
10、I寄存器寄存器,缺省情况寻址,缺省情况寻址DSDS所指向的段。所指向的段。 若为若为目标操作数目标操作数,则必须把,则必须把目标串首地址放目标串首地址放入入ES:DIES:DI寄存器寄存器,不允许使用段超越前缀。,不允许使用段超越前缀。(3 3)地址指针的修改)地址指针的修改串指令执行后自动修改地址指针串指令执行后自动修改地址指针SISI、DIDI。(4 4)方向标志)方向标志方向标志方向标志DFDF决定地址指针的增减决定地址指针的增减方向方向。 若若DFDF0 0,则地址指针增量;,则地址指针增量; 若若DFDF1 1,则地址指针减量。,则地址指针减量。(5 5)重复前缀)重复前缀串指令前可
11、以加重复前缀串指令前可以加重复前缀REPEREPEREPZREPZ、 REPREP或或REPNEREPNEREPNZ,REPNZ,使后跟的串指令重复使后跟的串指令重复执行。执行。 重复次数应事先初始化在计数器重复次数应事先初始化在计数器CXCX。二、串指令二、串指令1 1串传送指令串传送指令 MOVSMOVS显式格式:显式格式:MOVS DST, SRCMOVS DST, SRC隐含格式:隐含格式:MOVSBMOVSB,MOVSWMOVSW,MOVSDMOVSD功能功能: :源源目标目标, ,即即(SI)ES:DI,(SI)ES:DI,且自动修改且自动修改SISI、DIDI指针。指针。标志:不
12、影响标志位。标志:不影响标志位。 串传送指令允许目的串和源串串传送指令允许目的串和源串都是存储器操作数,在这一点都是存储器操作数,在这一点上有别于上有别于M0VM0V指令。指令。动画演示动画演示思考:思考:如何把自如何把自buf1buf1开始的开始的100100个字节数据个字节数据传送到传送到buf2buf2开始的区域中开始的区域中( (要求用串传送指要求用串传送指令)。令)。LEALEA SI, buf1 SI, buf1LEALEA DI, buf2 DI, buf2MOVMOV CX, 100 CX, 100CLDCLDREPREP MOVSB MOVSB前面的例子中语句前面的例子中语句
13、REPREPMOVSBMOVSB和它等价的程序段是什么?和它等价的程序段是什么?LAST:MOV AL,SILAST:MOV AL,SI MOV ES:DI,AL MOV ES:DI,AL INC SI INC SI INC DI INC DI LOOP LAST LOOP LASTLAST: MOVSBLAST: MOVSB LOOP LAST LOOP LAST串传送演示串传送演示2 2取串指令取串指令 LODS 例题演示例题演示显式格式:显式格式:LODS SRCLODS SRC隐含格式:隐含格式:LODSBLODSB, LODSWLODSW, LODSDLODSD功能:源功能:源累加器
14、,累加器, 即即(SI) AL(SI) AL(或(或AXAX、EAXEAX),), 且自动修改且自动修改SISI指针。指针。二、串指令二、串指令 自自buffer1buffer1开始的开始的1010个非压缩个非压缩BCDBCD码形式存放码形式存放的十进制数转换成的十进制数转换成ASCIIASCII码,按顺序显示在屏幕码,按顺序显示在屏幕上。设上。设DSDS、ESES已按要求设置已按要求设置GET: GET: LODSBLODSB OROR AL ,30H AL ,30H MOV DL ,AL MOV DL ,AL INT 21H INT 21H LOOPLOOP GET GETLEALEA S
15、I, buffer1 SI, buffer1MOVMOV CX, 10 CX, 10CLDCLDMOV AH , 02HMOV AH , 02H3 3存串指令存串指令 STOSSTOS显式格式:显式格式:STOS DSTSTOS DST隐含格式:隐含格式:STOSBSTOSB,STOSWSTOSW,STOSDSTOSD功能:累加器功能:累加器目标,目标, (AL(AL(或或AXAX、EAX)EAX)ES:DIES:DI, 且自动修改且自动修改DIDI指针。指针。 把自把自buffer1buffer1开始的非压缩开始的非压缩BCDBCD码存放码存放的十进的十进制数制数转换成转换成ASCIIASC
16、II码码,并放到并放到buufer2buufer2中中, ,字符串字符串长度为长度为1010字节。设字节。设DSDS、ESES已按要求设置已按要求设置 LEA LEA SI, buffer1 SI, buffer1LEALEA DI, buffer2 DI, buffer2MOVMOV CX, 10 CX, 10CLDCLD LOP: LOP: LODSBLODSBOROR AL, 30H AL, 30HSTOSBSTOSBLOOP LOPLOOP LOP例例. . 用用4 4到到5 5种方法编写实现以下功能的程序片断。种方法编写实现以下功能的程序片断。 把自把自buffer1buffer1开
17、始的开始的200200个字节数据传送到个字节数据传送到buffer2buffer2开始的区域中。开始的区域中。LEALEA SI, buffer1SI, buffer1LEALEA DI, buffer2DI, buffer2MOVMOV CX,200CX,200CLDCLD;=以上为公共语句以上为公共语句=REPREP MOVSBMOVSBLAST:MOV AL,SILAST:MOV AL,SI MOV ES:DI,AL MOV ES:DI,AL INC SI INC SI INC DI INC DI LOOP LAST LOOP LASTLAST: MOVSBLAST: MOVSB LOO
18、P LAST LOOP LASTLAST:LODSBLAST:LODSB STOSB STOSB LOOP LAST LOOP LASTMOV CX,100MOV CX,100CLDCLDREP MOVSWREP MOVSW4 4串比较指令串比较指令 CMPS 显式格式:显式格式:CMPS DST, SRCCMPS DST, SRC 隐含格式:隐含格式:CMPSBCMPSB,CMPSWCMPSW,CMPSDCMPSD 功能:源目标功能:源目标, ,即即(SI)(SI)(ES:DI)(ES:DI),并,并且根据指令执行结果且根据指令执行结果设置标志位设置标志位。 REPE/REPZ CMPS :
19、REPE/REPZ CMPS :指令结束后如果指令结束后如果ZfZf为为1 1,表明两串数据相等,表明两串数据相等,ZfZf为为0 0,表明至少有一个元,表明至少有一个元素不相等。素不相等。上机作业:字符串比较上机作业:字符串比较设数据区有两个字节串,串设数据区有两个字节串,串1 1的长度为的长度为5 5,串串2 2的长度为的长度为1010。请判断:请判断: 若串若串2 2的最后的最后5 5个字符和串个字符和串1 1相同,相同,则置则置FLAGFLAG单元为单元为“Y Y”,否则置为,否则置为“N N”STRING1 DB . STRING2 DB .FLAG DB YMOV SI,OFFSE
20、T STRING1+4MOV DI,OFFSET STRING2+9MOV CX,5STDREPE CMPSBJZ EXITMOV FLAG , NEXIT: MOV AH, 4CHINT 21H5 5串扫描指令串扫描指令 SCAS(搜索关键字)(搜索关键字)显式格式:显式格式:SCAS DST SCAS DST 隐含格式:隐含格式:SCASBSCASB, SCASWSCASW, SCASDSCASD功能:功能: 累加器目标累加器目标, ,即即(AL(AL(或或AX)AX)(ES:DIES:DI),并且),并且根据指令执行结果根据指令执行结果设置标志设置标志。指令执行后,指令执行后,DIDI自
21、动指向下一个元素,若自动指向下一个元素,若ZfZf1 1,说明相等。说明相等。如果用如果用REPEREPESCASBSCASB,指令执行后,指令执行后,DIDI自动指向下自动指向下一个元素,若一个元素,若ZfZf1 1,说明串中每一个都与目标相等。,说明串中每一个都与目标相等。例题例题 6-8(142页)页) 在数组在数组X X中查找中查找-1-1,找到后删除,后,找到后删除,后续元素前移,并修改数组元素长度。续元素前移,并修改数组元素长度。 要求用串扫描指令要求用串扫描指令SCASSCAS在一首址为在一首址为ARYARY长度为长度为2020的字符串查找字符的字符串查找字符“* *”,如果找到
22、,则将结果单元,如果找到,则将结果单元RESULTRESULT清清0 0,否则结果单元为全否则结果单元为全1 1。 LEA DI, ARY MOV RESULT,0FFH MOV CX,20 MOV AL,* REPNE SCASB JNZ END1 MOV RESULT,0 END1: HLT以下代码和前面例题的区别:以下代码和前面例题的区别: MOV BX , -1 MOV RESULT,-1 MOV CX,20 MOV AL,*DONE:INC BX CMP AL,ARYBX LOOPNE DONE JNZ END1 MOV RESULT,0END1: HLT6.4 6.4 常用循环控制
23、方法常用循环控制方法1.1.计数器控制法:计数器控制法: 循环次数已知循环次数已知2.2.条件控制法条件控制法 : 循环次数未知循环次数未知 3.3.逻辑尺控制法:逻辑尺控制法: 特殊的处理。特殊的处理。作业作业从自然数从自然数1开始累加,直到累加和大于开始累加,直到累加和大于500为止,为止,统计被累加的自然数的个数,并把统计的个统计被累加的自然数的个数,并把统计的个数送入单元数送入单元N中,把累加和送入单元中,把累加和送入单元SUM中。中。(sum1.asm) 分析:分析:用两个寄存器用两个寄存器,一个放累加的次数,一一个放累加的次数,一个放累加的和,条件控制法个放累加的和,条件控制法.上
24、机作业:上机作业: 把把x单元开始存放的单元开始存放的20个无符号数个无符号数中的最大数送中的最大数送z单元,并显示出最大数。单元,并显示出最大数。 要求从键盘动态输入要求从键盘动态输入20个数,并且个数,并且都是两位数。都是两位数。(bj1.asm)x dw 201,12,130,55,44,77,-15,180,190,20y dw ? . . MOV AX , X MOV BX , OFFSET X MOV CX , 9 L1: INC BX INC BX CMP AX , BX JAE L2 XCHG AX , BX L2: LOOP L1 MOV Y , AX思考:思考: 此程序段完
25、成什么此程序段完成什么功能?功能? BXBX1234例例6.1:把:把 BX BX 中的二进制数以十六进制的中的二进制数以十六进制的形式显示在屏幕上形式显示在屏幕上.6.5 6.5 循环程序举例循环程序举例 MOV CH, 4 ; 遍数遍数A5: MOV CL, 4 ; 移位次数移位次数 ROL BX, CL MOV AL, BL AND AL, 0FH ADD AL, 30H ; 09 CMP AL, 3AH ;是否大于是否大于9 JL DSP ADD AL, 7H ; AFDSP: MOV DL , AL MOV AH , 2 INT 21H DEC CH JNZ A5 MOV MOV B
26、XBX, 0, 0NEWCHAR: MOV AH, 1 INT 21HNEWCHAR: MOV AH, 1 INT 21H SUB AL, 30H SUB AL, 30H JL EXIT ; JL EXIT ; 00退出退出 CMP AL, 9CMP AL, 9 JG EXIT JG EXIT CBW CBW XCHG AX, BX XCHG AX, BX MOV CX, 10 MOV CX, 10 MUL CX MUL CX XCHG AX, BX XCHG AX, BX ADD ADD BXBX, AX, AXJMP NEWCHARJMP NEWCHAREXIT: EXIT: 例例6-2:
27、从键盘接收十进制数并存入:从键盘接收十进制数并存入 BXBX( ( 010)+1 )10+2 )10+5BxBx始终放转换始终放转换后用的数后用的数演示演示x dw ?ary_head dw 3,5.99 ary_end dw 105n dw 32 例例6-3:将正数:将正数 n n 插入一个已整序的正数字数组插入一个已整序的正数字数组(按递按递增顺序)增顺序)3 35 5151523233737494952526565787899991051053232-1-1ary_headary_endn n x x MOV AX, N MOV AX, N MOV ARY_HEAD-2, 0FFFFH
28、MOV ARY_HEAD-2, 0FFFFH MOV SI, 0 MOV SI, 0COMPARECOMPARE: CMP ARY_END SI, AX: CMP ARY_END SI, AX JLE INSERTJLE INSERT ;小于;小于N,N,直接插入最后直接插入最后 MOV BX, ARY_END SIMOV BX, ARY_END SI MOV ARY_END SI+2, BX MOV ARY_END SI+2, BX ; ;数组中大数后移一个位置数组中大数后移一个位置 SUB SI, 2 SUB SI, 2 JMP SHORT COMPARE JMP SHORT COMPARE INSERTINSERT: MOV ARY_END SI+2, AX: MOV ARY_END SI+2, AX例例6.46.4:有数组:有数组 x(x1,x(x1,x2,x2,x10) ,x10) 和和 y(y1,y2,y10)y(y1,y2,y10),编程计编程计(z1,(z1,z2,z2,z10),z10) z1 =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 护理技能操作带教规范
- 2024-2025学年吉林省辽源市东辽县第一高级中学高三下学期期末教学质量检测试题数学试题试卷含解析
- 2025年北京一零一中学高三第二学期停课不停学阶段性检测试题数学试题含解析
- 创业计划书:便利店项目演讲
- 双肺楔形切除麻醉管理
- 信息技术 第二册(五年制高职)课件 9.1.7 大数据与人工智能的区别与联系
- 幼教培训课件:《幼儿园教学设计的撰写》
- 企业快速会议
- 教育小学生正确对待盲盒
- 教育原理与策略教学方法
- 人工智能安全与隐私保护培训课件
- 建筑防水工程现场检测技术规范
- 八段锦课件教学课件
- 深基坑土方开挖专项施工方案
- 垃圾清运突发事件应急预案
- 投标项目进度计划
- 从古至今话廉洁-大学生廉洁素养教育智慧树知到期末考试答案章节答案2024年吉林大学
- “领跑者”标准评价要求松花粉
- 人音版 (五线谱)四年级下册音乐-5 《小溪流水响叮咚》教案
- 《雷雨(节选)》课文原文与同步练习
- 2023-2024学年上海交大附中高三上英语10月周练卷及答案
评论
0/150
提交评论