第章基本程序控制结构ppt课件

上传人:无*** 文档编号:176349779 上传时间:2022-12-21 格式:PPT 页数:43 大小:252.50KB
返回 下载 相关 举报
第章基本程序控制结构ppt课件_第1页
第1页 / 共43页
第章基本程序控制结构ppt课件_第2页
第2页 / 共43页
第章基本程序控制结构ppt课件_第3页
第3页 / 共43页
点击查看更多>>
资源描述
第五章第五章 顺序、分支、循环程序设计顺序、分支、循环程序设计(P160)(P160)1.概述概述一一.汇编言语程序设计的根本步骤汇编言语程序设计的根本步骤1.分析题意,确定算法分析题意,确定算法(笼统出描画问题的数学模型或整理出假设个笼统出描画问题的数学模型或整理出假设个 条规律,找出合理的解法。条规律,找出合理的解法。)2.绘出程序流程图绘出程序流程图3.编制程序编制程序(采用分段构造,合理分配存储单元,合理分配存放器采用分段构造,合理分配存储单元,合理分配存放器)4.调试程序调试程序 判别程序质量的规范判别程序质量的规范(1)程序的执行时间程序的执行时间(2)程序所占用的内存程序所占用的内存字节数字节数(3)程序的语句行数程序的语句行数二二.程序的根本构造程序的根本构造 顺序、分支、循环,每种构造只需一个入口和一个出口,三种构顺序、分支、循环,每种构造只需一个入口和一个出口,三种构造恣意组合和嵌套,可构成任何复杂的程序。造恣意组合和嵌套,可构成任何复杂的程序。1.顺序构造的程序设计1.1.顺序构造顺序构造先执行先执行A A操作,再执行操作,再执行B B操作。操作。A BAB流程图流程图N-S图图Ex1:按公式Y=X*X-50 mov al,mulbuf;(al)x mul al ;(ax)x*x sub ax,50 ;(ax)x*x-50 mov dstbuf,ax;(desbuf)y Ex:Ex:写一个把紧缩存放的写一个把紧缩存放的BCDBCD码,转换为对应的十进制数码,转换为对应的十进制数字字ASCIIASCII码的程序。码的程序。Data segmentBcd DB 86HASCII DB 2 dup(0)Data endsCode segment assume cs:code,ds:dataMain proc far start:mov ax,data mov ds,ax mov al,bcd and al,0fh add al,30h mov ASCII+1,al Mov al,bcdMov cl,4Shr al,clAdd al,30hMov ASCII,alMov ah,4chInt 21h Main endpCode ends end start863836ASCIIASCII+12.分支程序设计分支构造:根据条件判别决议程序的走向一一.转移指令转移指令 (P85)1.无条件转移指令无条件转移指令 格式:格式:JMP 阐明:阐明:常用标号表示。常用标号表示。EX:jmp lab1 mov ax,0 Lab1:mov ax,0ffh (1)段内转移段内转移-只改动只改动IP,转移地址由新的,转移地址由新的IP取代。取代。1)段内直接短转移段内直接短转移 格式:格式:JMP SHORT OPR 操作:操作:(IP)(IP)+D8阐明:(1)Opr是一个带补码的带符号的数,以満足向前、向后转移(普通用符号地址),只允许在-128+127字节内转移。(2)两字节指令Ex:jmp short hello Hello:mov al,3 Jmp指令指令E8 08老 IP B0 03新 IPMOV指令指令D8D8Cs:0100CPU一旦执行一旦执行JMP,(IP)=0102H(老老IP)D8=08H新的新的(IP)=0102+D8=010AH2)2)段内直接近转移段内直接近转移 格式:格式:JMP near ptr opr JMP near ptr opr 操作操作:(IP)(IP)+D16:(IP)(IP)+D16 阐明:阐明:OprOpr是一个带符号数,是一个带符号数,32K32K内转移,内转移,3 3字节指令字节指令3)3)段内间接转移段内间接转移 格式:格式:JMP Word ptr opr JMP Word ptr opr 操作操作:(IP)(EA):(IP)(EA)阐明阐明:有效地址来自内存单元中的内容,或一个有效地址来自内存单元中的内容,或一个1616位通用位通用存放器中的内容。存放器中的内容。Ex:JMP bx (IP)(BX)Ex:JMP bx (IP)(BX)JMP WORD PTR BP+TABLE JMP BXSI JMP WORD PTR BP+TABLE JMP BXSI 先计算先计算PAPA,找出,找出MEMMEM中的内容送给中的内容送给IPIP(2)(2)段间转移段间转移 从一个代码段转移到另一个代码段同,从一个代码段转移到另一个代码段同,JMPJMP同同时修正时修正CSCS和和IPIP内容。内容。1)1)段间直接段间直接(远远)转移转移 格式:格式:JMP FAR PTR OPRJMP FAR PTR OPR 操作:操作:(IP)OPR(IP)OPR的段内偏移地址的段内偏移地址 (CS)OPR (CS)OPR的所在的段地址的所在的段地址 阐明:指令中直接指定要转向的阐明:指令中直接指定要转向的IPIP和和CSCS ex:JMP far ptr next_prog ex:JMP far ptr next_prog 50EA 02 00 20JMP新IP新CS(IP)=0250H,(CS)=2000H2)2)段间间接转移段间间接转移 格式:格式:JMP DWORD PTR OPRJMP DWORD PTR OPR 操作:操作:(IP)(EA)(IP)(EA)(CS)(EA+2)(CS)(EA+2)ex ex:JMP DWORD PTR ALPHASPDIJMP DWORD PTR ALPHASPDI (EA)=(sp)+(di)+alpha (EA)=(sp)+(di)+alpha 把把(EA)(EA)单元中的内容送入单元中的内容送入(IP)(IP)把把(EA+2)(EA+2)单元中的内容送入单元中的内容送入(CS)(CS)2.条件转移指令 以某些标志位的逻辑运算作根据,满足规定的以某些标志位的逻辑运算作根据,满足规定的 条件转移,否那么顺序执行,转向的目的地址必需在条件转移,否那么顺序执行,转向的目的地址必需在 -128+127之间。之间。(1)格式:格式:Jxx (2)阐明:阐明:JXX-转移条件转移条件 -标号标号 指令为指令为2字节字节 运用条件转移指令之前,必需选择影响标志位的运用条件转移指令之前,必需选择影响标志位的 指令指令(CMP、TEST等等)。指令指令转移条件转移条件含义含义 JC JNC CF=1 CF=0有进位有进位(借位借位)转移转移无进位无进位(借位借位)转移转移JE/JZJE/JZJNE/JNZJNE/JNZ ZF=1 ZF=0 相等相等(等于等于0)转移转移不相等不相等 (不等于不等于0)0)转移转移 JS JNS SF=1 SF=0 负数转移负数转移 正数转移正数转移 JO JNO OF=1 OF=0 有溢出转移有溢出转移 无溢出转移无溢出转移JP/JPEJP/JPEJNP/JPOJNP/JPO PF=1 PF=0 有偶数个有偶数个“1转移转移 有奇数个有奇数个“1转移转移(3)(3)单条件单条件 转移指令转移指令 1)1)单一标志位单一标志位2)JCXZ2)JCXZ格式:格式:JCXZ JCXZ 操作:操作:假设假设(CX)=0(CX)=0,转至,转至 ,否那么顺序执行。,否那么顺序执行。(4)(4)无符号数比较无符号数比较 用来判别无符号数的大小,判别条件:用来判别无符号数的大小,判别条件:CFCF、ZFZF指令转移条件含义JA/JNLECF=0 AND ZF=0 AB转移JAE/JNBCF=0 OR ZF=1 A=B转移JB/JNAECF=1 AND ZF=0 AB转移JBE/JNA CF=1 OR ZF=1 AB转移JGE/JNLSF=OF OR ZF=1 A=B转移JL/JNGECF=OF AND ZF=0 AB转移JLE/JNG A0 if:(ax)x0 x=0 (bx)y -1 x=0?NY=-1Y=0Y=1X=0?YYN流程图 .mov ax,x cmp ax,0 jge biger mov bx,-1 jmp nextBiger:jz equl mov bx,1 jmp nextEqul:mov bx,0Next:ex:知两个整数变量知两个整数变量A和和B,编程:,编程:(1)假设两个数中有一个奇数,那假设两个数中有一个奇数,那么将奇数存入么将奇数存入ABUF单元,偶数存入单元,偶数存入BBUF单元单元。(2)假设两个数中均为奇数,那么两数分别加假设两个数中均为奇数,那么两数分别加1,并存回原变量处。,并存回原变量处。(3)假设两个数中均为偶数,假设两个数中均为偶数,那么两数不变那么两数不变A、B同同类?类?NYB偶?NB+1 BA+1 AB偶?A BData segmentAbuf db x1Bbuf db x2Data endsCode segmentAssume cs:code,ds:dataMain proc farStart:mov ax,data mov ds,ax mov al,abuf mov bl,bbuf xor al,bl test al,01h jz class test bl,01h jz exit xchg bl,abuf mov bbuf,bl jmp exitClass:test bl,01h jz exit inc abuf inc bbufExit:mov ah,4cH int 21H Main endpCode ends end start3.3.循环程序设计循环程序设计(P160)(P160)在运用中,往往要求某一段程序反复执行多次,这时要用循环构造。在运用中,往往要求某一段程序反复执行多次,这时要用循环构造。一一.循环控制命令循环控制命令(P95)1.LOOP指令指令 格式:格式:LOOP OPR 测试条件测试条件(CX)0,循环循环 操作操作:(1)(CX)(CX)-1 (2)检测条件,假设满足,转移至标号,否那么,顺序执行检测条件,假设满足,转移至标号,否那么,顺序执行 阐明:阐明:(1)运用运用LOOP前,循环次数送入前,循环次数送入CX (2)本命令等价于:本命令等价于:DEC CX JNZ 2.LOOPZ/LOOPE指令指令(为为0或相等时循环或相等时循环)格式:格式:LOOPZ/LOOPE OPR 测试条件测试条件ZF=1且且(CX)0,循环循环 操作同上。本指令可以提早终了循环。操作同上。本指令可以提早终了循环。3.LOOPNZ/LOOPNE指令指令(不为不为0或不相等时循环或不相等时循环)格式:格式:LOOPNZ/LOOPNE OPR 测试条件测试条件ZF=0且且(CX)0,循环循环 操作同上。本指令可以提早终了循环。操作同上。本指令可以提早终了循环。二二.循环程序的构造循环程序的构造1.循环程序的组成(1)初始化:设置循环计数值,设置变量等(2)循环体:程序的处置部分(3)循环控制部分:对循环能否终了加以断定,修正变量、指针,为下一次循环作预备。(4)终了处置:分析、存放程序的结果。2.循环程序有两种构造方式循环程序有两种构造方式 (1)DOwhile(当型当型)循环初始形状循环控制条件?循环体终了处置NY 循环体条件?先判别条件,能够循环体一次也不执行,又称“零迭代次循环(2)DOUntil(直到型)循环初始形状循环控制条件?循环体终了处置NY 循环体条件?先执行后判别,循环体至少执行一次。三.循环程序的设计方法1.1.计数器控制循环计数器控制循环(假设循环次数有能够为假设循环次数有能够为0 0,用,用DO WHILEDO WHILE构造构造)()(可正计数或负计数可正计数或负计数!)!)ex5.1(P161)ex5.1(P161):把:把BXBX存放器内的二进制数用十六进存放器内的二进制数用十六进制方式在屏幕上显示出来。制方式在屏幕上显示出来。(1)(1)算法分析:算法分析:BXBX内容从左向右每四位为一组在屏内容从左向右每四位为一组在屏幕上显示幕上显示(循环循环),循环次数为,循环次数为4(4(四位二进制数四位二进制数一组一组),屏幕上显示的是,屏幕上显示的是ASCIIASCII码。码。(AL)(BL),保管低四位(AL)(AL)+30H(AL)=3A(AL)(AL)+7构成AF的ASCII码(DL)(AL),调DOS功能显示初始化Bx循环左移四位(CH)(CH)-1(CH)=0?NendYN(CH)=4,赋值给BX(负计数)(2)流程图流程图Data segment Number dw 0111011101011111BData endsCode segment assume cs:code,ds:dataMain proc farStart:mov ax,data mov ds,ax lea si,number mov bx,si mov ch,4Rotate:mov cl,4 rol bx,cl mov al,bl and al,0fh add al,30h cmp al,3ah Jl printit add al,7hPrintit:mov dl,al mov ah,2 int 21h dec ch jnz rotate mov ah,4ch int 21hMain endpCode ends end start Mov cx,4Rotate:push cx mov cl,4POP CXLOOP ROTATE2.条件控制法(循环次数不能确定,満足某个条件可继续循环。)ex:设在内存某一数据区以string地址开场存放了一字符串,其最后一个字符为“$(24H),要求检查该字符串中一切字符的奇偶性,规定每个字符对应的一个字节中必需有偶数个“1,那么为正确。假设奇偶性正确,结果为0,否那么结果为-1。分析:循环终了的条件有两个(“或的关系)(1)只需有一个字符奇偶性错,就退出循环并置结果单元为-1。(2)测试到终了标志“$时也退出循环。此时一切字符奇偶性正确,结果为0。取串首址送BX结果单元地址送DI取一字符送AL(BX)(BX)+1(AL)=“$PF=0?(奇)(AH)0(AH)1RESULT (AH)ENDData segmentString db This is a string,$Result db?Data ends;Code segment assume cs:code,ds:dataMain proc far Start:mov ax,data mov ds,ax lea bx,string lea di,resultLop1:mov al,bx inc bx cmp al,24h jz done or al,al jpo error jmp lop1Done:mov ah,0 jmp next Error:mov ah,-1Next:mov di,ah mov ah,4ch int 21hMain endpCode ends end start 3.逻辑尺控制法 在实践运用的循环程序中,有时循环体内具有多在实践运用的循环程序中,有时循环体内具有多分支构造的循环程序,每执行循环一次,程序应按照分支构造的循环程序,每执行循环一次,程序应按照规定好的次序去执行其他分支或反复执行某个分支。规定好的次序去执行其他分支或反复执行某个分支。对于这种构造的循环程序,我们采用逻辑尺控制方法对于这种构造的循环程序,我们采用逻辑尺控制方法来实现。来实现。逻辑尺控制法首先应设计一把逻辑逻辑尺控制法首先应设计一把逻辑“尺,即将字节、尺,即将字节、字或双字甚至将根据需求所设置的多字节中的各位表字或双字甚至将根据需求所设置的多字节中的各位表示不同的操作。假设在循环中执行更多分支,也可采示不同的操作。假设在循环中执行更多分支,也可采用多位组合,如:用多位组合,如:2位组合表示位组合表示4个分支,个分支,3位组合表示位组合表示8个分支。最简单的逻辑尺是用一位个分支。最简单的逻辑尺是用一位“0和和“1表示表示 两种不同的分支。两种不同的分支。P167.ex5.5 设有数组设有数组X和和Y,X中有中有X1,,X10,Y中有中有Y1,,Y10,试编程计算试编程计算,结果存入结果存入Z中中.z1=x1+y1 z5=x5-y5 z8=x8-y8 z2=x2+y2 z6=x6+y6 z9=x9+y9 z3=x3-y3 z7=x7-y7 z10=x10+y10 z4=x4-y4 分析:可用循环十次,每次取数,操作加、减分析:可用循环十次,每次取数,操作加、减 为了区别,设立标志位为了区别,设立标志位 0:加:加 1:减:减 逻辑尺:逻辑尺:0000000011011100(前前6位无意义位无意义!)置循环计数值I=0(下标)测试尺第i位?Xi-YiXi+Yi结果送ZiI=I+1计数值-1计数值为0NEND data segment x dw 1,2,3,4,5,6,7,8,9,10Y dw 10,6,7,4,5,3,2,1,7,3Z dw 10 dup(?)Logic_rule dw 00dcHData endsCode segment assume cs:code,ds:dataMain proc farStart:mov ax,data mov ds,ax mov bx,0 mov cx,10 mov dx,logic_ruleNext:mov ax,xbx shr dx,1 jc subs add ax,ybx jmp short resultSubs:sub ax,ybxResult:mov zbx,ax add bx,2 loop next Mov Ax,4c00H Int 21HMain:endpCode ends end satrt采用静态采用静态逻辑尺逻辑尺!(P170)ex5.6 从键盘上输入一行字符,要求第一个字符从键盘上输入一行字符,要求第一个字符为空格,不是,退出。假设是,开场接受字符,并为空格,不是,退出。假设是,开场接受字符,并存入存入BUFFER为首址的缓冲区为首址的缓冲区(空格符不存入空格符不存入),直,直至第二个空格符时,退出程序。至第二个空格符时,退出程序。分析:分析:(1)是第一个字符,不是空格,是第一个字符,不是空格,flag=0,退出。退出。(2)是第一个字符,是空格,是第一个字符,是空格,flag=1,输入下一个字,输入下一个字符。符。(3)不是第一个字符,是空格,不是第一个字符,是空格,flag=1,退出。退出。(4)不是第一个字符,不是空格,不是第一个字符,不是空格,flag=1,存入存入Buffer。falg:是一逻辑尺,开场时是一逻辑尺,开场时flag=0,空格开场空格开场时时,flag=1,空格终了时空格终了时,flag=1。(动态逻辑尺动态逻辑尺)置缓冲区首址及标志位接受一字符首字符?Space?ENDSpace?存入,接 受下一字符Flag=1Data segmentBuffer db 80 dup(?)Flag db?Data endsCode segment assume cs:code,ds:dataMain proc far start:mov ax,data mov ds,ax lea bx,buffer mov flag,0Next:mov ah,01 int 21h test flag,01h jnz follow cmp al,20h jnz exit mov flag,1 jmp nextFollow:cmp al,20h jz exit mov bx,al inc bx jmp nextExit:mov ah,4ch int 21hMain endpCode ends end start 四.多重循环程序设计 一个循环程序的循环体中又包含着循环构造这就是多重循环。Ex:5.8 附加段有一个字数组,首址在DI中,第一个字为数组长度,使数组整序(从大到小)。分析:(用冒泡法)原算法为:从第一个数开场依次对相邻两个数比较,次序不对交换位置,次序对,不作任何操作,N个数,进展N-1次比较,最小的数已放到最后。(要比较N-1遍)比较遍数 1 2 3 N-3 N-2 N-1 比较次数:(N-1)+(N-2)+(N-3)+3 +2 +1=O(n2)EX:8 5 16 84 32 一遍 8 16 84 32 5 二遍 16 84 32 8 5 三遍 84 32 16 8 5缺陷:大多数情况,数组缺陷:大多数情况,数组未比较未比较N-1N-1遍已到达目的,遍已到达目的,而程序必需进展而程序必需进展N-1N-1遍操作。遍操作。改良:设一个标志位,改良:设一个标志位,外循环为外循环为1 1,进入内循,进入内循环时,每交换一次置环时,每交换一次置0 0,每次内循环终了,标每次内循环终了,标志位假设为志位假设为0 0,进入下,进入下一次外循环,假设为一次外循环,假设为1 1,表示表示 已有序,立刻终已有序,立刻终了外循环。了外循环。外循环SAVE_CNT N标志 1SAVE_CNT SAVE_CNT-1SAVE_CNT=0?CX SAVE_CNT,DI 首址Ai+1=AiAi Ai+1,标志 0(CX)-1=0?标志=0?ENDYNNNYYN data segmentSave_cnt dw?Start_addr dw?Data endsExtra segmentX dw 10,34,45,67,21,38,98,120,31,53,44Extra endsCode segment assume cs:code,ds:data,es:extraMain proc farStart:push bx mov ax,data mov ds,ax mov ax,extra mov es,ax lea di,x mov start_addr,di mov cx,es:di mov save_cnt,cxInit:mov bx,1 dec save_cnt jz stored mov cx,save_cnt mov di,start_addr next:add di,2 mov ax,es:di cmp es:di+2,ax jle cont xchg es:di+2,ax mov es:di,ax sub bx,bxCont:loop next cmp bx,0 je initStored:mov di,start_addr pop bx mov ah,4ch int 21hMain endpCode ends end start Lesson:5.1,5.7,5.17,5.24,3.38 补充作业1.有以下程序段FIBONA DW 40H DUP(?)NUM DB 10 .MOV CX,0 MOV CL,NUM MOV AX,0 MOV BX,1 MOV DI,0LOP:MOV FIBONADI,AX ADD AX,BX XCHG AX,BX ADD DI,TYPE FIBONA LOOP LOP上述程序段执行后,试给出FINONA前10个单元的内容2.有以下程序段有以下程序段 aryb db 3 dup(1,3,5,7)mov si,offset aryb mov cx,10 mov ax,0Again:add al,si and al,0Fh cmp al,9 jbe le1 inc ah sub al,9Le1:loop again上述程序段执行后,上述程序段执行后,(AX)=?,假设用指令?,假设用指令loopne替代替代LOOP,那么,那么上述程序段上述程序段(AX)=?,?,(CX)=?
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 压缩资料 > 基础医学


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!