基本程序控制结构.ppt
《基本程序控制结构.ppt》由会员分享,可在线阅读,更多相关《基本程序控制结构.ppt(43页珍藏版)》请在三一办公上搜索。
1、第五章 顺序、分支、循环程序设计(P160),1.概述一.汇编语言程序设计的基本步骤1.分析题意,确定算法(抽象出描述问题的数学模型或整理出若个 条规律,找出合理的解法。)2.绘出程序流程图3.编制程序(采用分段结构,合理分配存储单元,合理分配寄存器)4.调试程序 判断程序质量的标准(1)程序的执行时间(2)程序所占用的内存字节数(3)程序的语句行数二.程序的基本结构 顺序、分支、循环,每种结构只有一个入口和一个出口,三种结构任意组合和嵌套,可构成任何复杂的程序。,1.顺序结构的程序设计,1.顺序结构先执行A操作,再执行B操作。,A,B,流程图,N-S图,Ex1:按公式Y=X*X-50 mov
2、 al,mulbuf;(al)x mul al;(ax)x*x sub ax,50;(ax)x*x-50 mov dstbuf,ax;(desbuf)y,Ex:写一个把压缩存放的BCD码,转换为对应的十进制数字ASCII码的程序。,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,bcdM
3、ov cl,4Shr al,clAdd al,30hMov ASCII,alMov ah,4chInt 21h Main endpCode ends end start,86,38,36,ASCII,ASCII+1,2.分支程序设计分支结构:根据条件判断决定程序的走向,一.转移指令(P85)1.无条件转移指令 格式:JMP 说明:常用标号表示。EX:jmp lab1 mov ax,0 Lab1:mov ax,0ffh(1)段内转移-只改变IP,转移地址由新的IP取代。1)段内直接短转移 格式:JMP SHORT OPR 操作:(IP)(IP)+D8,无条件转移可在段内进行,也可在段间进行,寻址
4、有直接寻址和间接寻址,JMP不影响状态位。,说明:(1)Opr是一个带补码的带符号的数,以満足向前、向后转移(一般用符号地址),只允许在-128+127字节内转移。(2)两字节指令Ex:jmp short hello Hello:mov al,3,Jmp指令,E8,08,老 IP,B0,03,新 IP,MOV指令,D8,D8,Cs:0100,CPU一旦执行JMP,(IP)=0102H(老IP)D8=08H新的(IP)=0102+D8=010AH,2)段内直接近转移 格式:JMP near ptr opr 操作:(IP)(IP)+D16 说明:Opr是一个带符号数,32K内转移,3字节指令3)段
5、内间接转移 格式:JMP Word ptr opr 操作:(IP)(EA)说明:有效地址来自内存单元中的内容,或一个16位通用寄存器中的内容。Ex:JMP bx(IP)(BX)JMP WORD PTR BP+TABLE JMP BXSI 先计算PA,找出MEM中的内容送给IP,(2)段间转移 从一个代码段转移到另一个代码段同,JMP同时修改CS和IP内容。1)段间直接(远)转移 格式:JMP FAR PTR OPR 操作:(IP)OPR的段内偏移地址(CS)OPR的所在的段地址 说明:指令中直接指定要转向的IP和CS ex:JMP far ptr next_prog,50,EA,02,00,2
6、0,JMP,新IP,新CS,(IP)=0250H,(CS)=2000H,2)段间间接转移 格式:JMP DWORD PTR OPR 操作:(IP)(EA)(CS)(EA+2)ex:JMP DWORD PTR ALPHASPDI(EA)=(sp)+(di)+alpha 把(EA)单元中的内容送入(IP)把(EA+2)单元中的内容送入(CS),2.条件转移指令,以某些标志位的逻辑运算作依据,满足规定的 条件转移,否则顺序执行,转向的目标地址必须在-128+127之间。(1)格式:Jxx(2)说明:JXX-转移条件-标号 指令为2字节 使用条件转移指令之前,必须选择影响标志位的 指令(CMP、TES
7、T等)。,指令,转移条件,含义,JC JNC,CF=1 CF=0,有进位(借位)转移,无进位(借位)转移,JE/JZJNE/JNZ,ZF=1 ZF=0,相等(等于0)转移,不相等(不等于0)转移,JS JNS,SF=1 SF=0,负数转移,正数转移,JO JNO,OF=1 OF=0,有溢出转移,无溢出转移,JP/JPEJNP/JPO,PF=1 PF=0,有偶数个“1转移,有奇数个“1转移,(3)单条件 转移指令 1)单一标志位,2)JCXZ格式:JCXZ 操作:若(CX)=0,转至,否则顺序执行。(4)无符号数比较 用来判断无符号数的大小,判断条件:CF、ZF,指令,转移条件,含义,JA/JN
8、LE,CF=0 AND ZF=0,AB转移,JAE/JNB,CF=0 OR ZF=1,A=B转移,JB/JNAE,CF=1 AND ZF=0,AB转移,JBE/JNA,CF=1 OR ZF=1,A=B转移,(5)带符号数条件转移指令,指令,转移条件,含义,JG/JNLE,SF=OF AND ZF=0,AB转移,JGE/JNL,SF=OF OR ZF=1,A=B转移,JL/JNGE,CF=OF AND ZF=0,AB转移,JLE/JNG,A=B转移,CF=OF OR ZF=1,二.分支程序设计(P176),1.分支程序的结构形式,条件?,A,B,ture,flase,条件?,A1,A2,An,(
9、2)双分支结构,(3)多路分支结构,特点:运行方向向前,某一条件成立,执行其中的一个分支。,条件?,A,(1)单分支结构,ture,flase,2.分支的实现,(1)产生条件(执行指令CMP、SUB、AND、TEST和移位,影响Flags标志位ZF、CF、OF、SF等)(2)测试(用条件转移指令测试)(3)定向(4)标号,3.多分支程序设计(转移表方法、地址表方法、逻辑分解法),(1)转移表方法思想:在程序中建立一张多路分支的转移指令表(转移表),各分支转移指令在表中的位置,即离首址的位移量作为条件,当进行判断时,把当前条件的偏移量加上表首址作为转移地址。转移至表的相应位置,继续执行条件转移指
10、令,达到多分支目的。,JMP xx,JMP xx,JMP xx,表首址,JMP xx 段内为2字节,段间为3字节,转移表,程序实现:1)在代码段建立转移指令表2)建立分支处理程序段3)形成转移表偏移地址(BX:表首址,AX:偏移量)4)用无条件转移指令转至对应转移指令,实现分支:JMP BX,ex:根据从键盘输入的大写字母AZ,分别转向MA,MB,,MZ这26个分支程序之一。(用转移表实现。),Jmp MA,Jmp MB,Jmp MC,Jmp MZ,表首址,转移表,CS段,Code segment.lea bx,maddr;表首址存入BX xor ah,ah;AH清0 add ax,ax;序号
11、*2送AX(段内短转移)add bx,ax;转移入口地址送BX jmp bx;转移至相应模块的转移表位置去Maddr:jmp short ma jmp short mb jmp short mzMa:;Mb:;.Mz:;Code ends,转移表,模块程序段,2)地址表法,思想:与转移表类似,不同之处:表中存放的是各分支程序的入口地址。(可以是偏移地址或偏移+段地址),一般是段内转移。,程序实现:1)在数据段建立入口地址表2)建立分支处理程序段3)形成分支的入口地址4)用无条件转移指令转至对应的入口地址,实现分支:JMP BX,入口地址1,入口地址2,入口地址n,.,地址表,表首址,DS段,e
12、x:根据从键盘输入的大写字母AZ,分别转向MA,MB,,MZ这26个分支程序之一。(用地址表法实现。),Ma入口地址,Mb入口地址,Mz入口地址,地址表,DS段,Data segmentMaddr dw ma,mb,mc,md,mx,my,mzData endsCode segment assume cs:code,ds:dataMain proc farStart:mov ax,data mov ds,ax lea bx,maddr mov ah,1 int 21h sub al,A shl al,1 xor ah,ah add bx,ax jmp word ptr bx.Ma:;Mb:;M
13、z:.;.,从键盘输入一字符,计算入口地址,注意:转移表法和地址表法的异同!,算法类似:核心问题-查表不同的是:(1)地址表中存放的是分支程序的入口地址,已直接可以转入分支程序的入口,而转移表中存放的是转入分支程序的转移指令。转移表法先得转移到转移表的相应位置,继续再执行一次转移指令,才能到达分支程序的入口。(2)地址表存在DS段,而转移表存在CS段。,(3)逻辑分解法,前面介绍的两种方法:用于分支条件是一种线性规律的场合,即条件是连续有序的或基本是连续有序的整数。(条件相异:即当前只能有一种条件成立)实际问题中还有一种分支:分支条件不満足线性规律,即分支条件是一些跳跃性很大的离散值。另外,还
14、有相容性条件的情况,针对这些情况,无法采用前面介绍的方法,现采用逻辑分解法。,思想:按条件的先后,依次分解成一串双分支结构,通过双分支的方法进行程序设计。(将条件转为逻辑值0和1,通过程序轮询的方式产生分支。),ex:若AL寄存器中存放了当前外部是否有中断请求的情况。AL的每一位对应一个中断源的中断请求情况。若有中断请求,该位为1,否则,无中断请求。当某一中断源有中断请求,就转向相应的中断处理程序,各位所对应的中断处理程序的入口地址如下表所示。,B0=1,中断处理R0,B1=1,中断处理R1,B6=1,中断处理R6,B7=1,中断处理R7,Y,Y,Y,Y,N,N,N,N,.,逻辑分解,.ROR
15、 AL,1;AL的B0位送CFJC R0;B0=1,转R0ROR AL,1;AL的B1位送CFJC R1;B1=1,转R1ROR AL,1;AL的B2位送CFJC R2;B2=1,转R2ROR AL,1;AL的B3位送CFJC R3;B3=1,转R3ROR AL,1;AL的B4位送CFJC R4;B4=1,转R4ROR AL,1;AL的B5位送CFJC R5;B5=1,转R5ROR AL,1;AL的B6位送CFJC R6;B6=1,转R6ROR AL,1;AL的B7位送CFJC R7;B7=1,转R7,Ex1:符号函数,1 x0 if:(ax)x0 x=0(bx)y-1 x0,Y=,X=0?,
16、N,Y=-1,Y=0,Y=1,X=0?,Y,Y,N,流程图,.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同类?,N,Y,B偶?,N,B+1 BA+1 A,B偶?,Y,Y,A B,Data segmentAbuf db x1Bbuf db
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 程序控制 结构
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-6412177.html