资源描述:
《第5章分支程序设计ppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五章分支程序设计设问:1.分支程序结构有哪几种?2.都有哪些指令可以实现分支?3.可以对二进制的某一位操作的指令有哪些?4.系统是如何把程序调入内存执行的?5.菜单程序如何设计?本章重点分支结构的概念位运算的分支程序深入分析转移特征走向分支5.1.1分支结构1.两路分支结构2.多级分支结构3.多路分支结构图示图示图示5.1分支的概念5.1.2一个分支程序例子返回返回返回示例5-1设计分支程序,实现下列公式计算。X、Y为字型。假设X单元中保存三个数:9,-6,34,分别作判断和计算。X2X<0Y=2X+30≤X<10X/6X≥105.1.2一个分支程序例子设计思路:(1)在数据段中定义
2、2个变量X、Y,均为带符号数;(2)在X单元中分别取出三个字作判断,根据X的大小作分支转移;(3)采用寄存器相对寻址方式(MOVAX,X[SI])分别取出X的三个值;(4)标号OUT1是各路分支的公共出口。程序框图:程序如下:;5-1.asm用正常程序格式编写分支程序datasegmentxdw9,-6,34ydw3dup(?)dataendscodesegmentassumecs:code,ds:datastart:movax,datamovds,axmovcx,3;循环三次movsi,0let0:movax,x[si];取出Xcmpax,0;X≥0?jgelet1;是,转到let1
3、movbx,ax;否,计算X*Ximulbxjmpout1;跳到公共出口out1let1:cmpax,10;X≥10?jgelet2;是,转到let2salax,1;否,计算2X+3addax,3jmpout1;跳到公共出口out1let2:movbl,6;计算X/6idivbl;商在al,余数在ahout1:movy[si],ax;保存Yaddsi,2deccx;CX-1cmpcx,0jnzlet0;CX≠0转移到let0movah,4ch;CX=0,程序结束int21hcodeendsendstart返回运行结果:在DOS下执行程序5-1.exe后又返回到DOS,没有显示。要观察运
4、行结果,采用DEBUG执行5-1.exe。在DEBUG下,用U命令查看,找到断点0039,用G0039执行,再用D命令查看结果。5.1.3转移地址的寻址1.段内直接短转移格式:JMPSHORTOPR执行的操作:(IP)←(IP)+8位位移量OPR注:(1)这种转移格式只允许在-128到127字节的范围内转移。(2)“直接”代表标号直接写在指令中。例:代码段内有一无条件转移指令如下:┇JMPSHORTHELLO┇HELLO:MOVAL,32.段内直接近转移格式:JMPNEARPTROPR执行的操作:(IP)←(IP)+16位位移量注:转移范围在-32768到+32767字节之间例1JMP
5、AA1JMPNEARPTRAA1┇AA1:MOVAX,63.段内间接转移格式:JMPWORDPTROPR执行的操作:(IP)←(EA)功能:转移的地址由EA指出。其中有效地址EA值由OPR的寻址方式确定。如果是寄存器寻址,则把16位寄存器的内容送到IP寄存器中;如果指定的是存储单元中的一个字,则取出该存储单元的内容送到IP寄存器中去。例1JMPBXJMPWORDPTR[BX+SI]设(BX)=0120H,(SI)=0534H第1条指令执行后,转移到标号为0120H处执行;第2条指令执行时,先计算操作数的有效地址EA=(BX)+(SI)=0654H在数据段的0654H单元中取出一个字放入
6、IP;然后转移到IP所指处。4.段间直接(远)转移格式:JMPFARPTROPR执行的操作:(IP)←OPR的段内偏移地址(CS)←OPR所在段的段地址注:(1)直接写在指令中的标号的属性为FAR型(2)标号的偏移地址送入IP,标号的段地址送入CS例1代码段CODE1中的JMP指令要远程转移到CODE2代码段的AA2标号去执行。实现跨段远转移。CODE1SEGMENT COCE2SEGMENT┇┇JMPFARPTRAA2AA2:MOVCX,5┇ ┇CODE1ENDS CODE2ENDS5.段间间接转移格式:JMPDWORDPTROPR执行的操作:(IP)←(EA)(CS)←(EA
7、+2)注:转移的地址存放在数据段的双字单元中,其中低字为IP值,高字为CS值。5.1.4条件转移方式条件转移为短转移,转移的范围在-128到+127之间。条件转移指令可分为四组。1.根据条件标志转移2.无符号数比较转移3.带符号数比较转移4.CX值为0则转移条件转移指令的格式都是由转移指令操作码和标号OPR构成。格式:转移指令操作码OPR例如:JZLET1功能:结果为0就转移到标号为LET1的指令执行;不为0,则接着执行下一条指令。1.根据条件