第五章 基本程序设计技术.ppt
《第五章 基本程序设计技术.ppt》由会员分享,可在线阅读,更多相关《第五章 基本程序设计技术.ppt(107页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、1,一般源程序的基本结构:,第五章 程序控制结构及其设计技术,顺序程序,分支程序,循环程序,子程序,2,5.1 顺序程序设计,顺序程序是指程序的结构从开始到结尾一直是顺序执行,中途没有分支。,例 5.2.1 试编写程序计算以下表达式: Z=(3X+Y-5)/2设X、Y的值放在字变量VARX、VARY中,结果存放在VARZ中。,算法分析: 1、乘2n和除2n可以使用算术左移和右移实现 2、其它非2n的乘除运算可以用移位和加减组合运算来实现。如 3X可以分解成2X+X,3,TITLE EQUATION COMPUTEDATA SEGMENTVARX DW 15VARY DW 10VARZ DW ?
2、DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP (0)STACK1 ENDSCODE SEGMENTPROC1 PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK1,4,START:PUSH DS MOV AX,0 PUSH AX MOV AX,DATA MOV DS,AX MOV AX,VARX SHL AX,1 ;2*X ADD AX,VARX ;3*X ADD AX,VARY ;3X+Y SUB AX,5 ;3*X+Y-5 SAR AX,1 ;(3*X+Y-5)/2 MOV VARZ,AX ;存结果 RETPROC
3、1 ENDPCODE ENDS END START,5,例5.2.2 利用学号查学生的数学成绩表。,算法分析:首先在数据段中建立一个成绩表TABLE,在表中各学生的成绩按照学号从小到大的顺序存放。要查的学号存放在变量NUM中,查表的结果放在变量MATH中。,6,TITLE TABLE LOOKUPDATA SEGMENTTABLE DB 81,78,90,64,85,76,93,82,57,80 DB 73,62,87,77,74,86,95,91,82,71NUM DB 8MATH DB ?DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STA
4、CK1 ENDSCOSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1,7,START: MOV AX,DATA MOV DS,AX MOV BX,OFFSET TABLE ;BX指向表首址 XOR AH,AH MOV AL,NUM DEC AL ;实际学号是从1开始的 ADD BX,AX ;BX加上学号指向要查的成绩 MOV AL,BX ;查到成绩送AL MOV MATH,AL ;存结果 MOV AH,4CH ;返回DOS INT 21HCOSEG ENDS END START,8,在上述程序中,如果使用换码指令XLAT,可以简化程序。,XLAT 表首
5、址 ;功能为:AL=(BX)+(AL),换码指令格式为:,其中表首址可以省略。,在XLAT指令执行前,要求将表首址的偏移量送入BX中,待查项与表首址之间的字节距离 (0255)送入AL中。,9,一.转移指令,目标是程序中的一个标号, 表示转移指令所转移的目的地指令的地址。,1. 无条件转移指令,5.2分支程序设计,分支程序结构是指程序的执行顺序将根据某些指令的执行结果,选择某些指令执行或不执行。,分支程序的实现主要是由转移指令完成。,格式: JMP 目标,10,: JMP TARGET :TARGET: . :,根据目标所在的位置,JMP指令分为段内转移和段间转移。,(1) 段内转移,JMP指
6、令与转移目标位于同一个代码段内。转移时IP寄存器内容被改变,而CS保持不变。,程序结构:,11,. JMP LABEL1 LABEL1: ,目标地址可以有两种提供方法:,A. 段内转移直接寻址- 指令中直接给出转移目的地标号,例如,. LABEL2: JMP LABEL2,或者,12,OPCODE DISP,指令编码:,OPCODE字段长度为一个字节, DISP字段根据OPCODE字段为不同编码时分别为1个或2个字节。 DISP 为相对位移量,用补码表示。,7 0 15/7 0,指令的功能为: IP =( IP )+ DISP,0EBH时,为短转移,DISP为8位,转移偏移量: -128+12
7、7 字节,OPCODE=,0E9H时,为长转移,DISP为16位,转移偏移量: -32768+32767,13,注意:转移偏移量是相对转移指令的下一条指令的起始地址,如果是相对于该转移指令的地址而言,则相对偏移量的值为:,-126+129字节,或,-32765+32770,14,OPCODE MOD 100 R/M 位移量,B. 段内转移间接寻址指令中指定一个16位通用寄存器或字存储单元,其内容为转移目标地址。,例如:JMP CX JMP WORD PTR BXSI,指令编码格式:,7 0 7 0 15/7 0,指令执行时,由MOD、R/M以及位移量确定一个寄存器或有效地址EA,将所指内容送入
8、IP中。,15,(2)段间转移JMP指令与目标地址不在同一个段内,COSEG1 SEGMENT COSEG2 SEGMENT : JMP FAR PTR TARGET TARGET:. : : COSEG1 ENDS COSEG2 ENDS,A、段间转移直接寻址,在JMP指令中,目标地址符前面加属性说明为FAR。,例如:,执行该转移指令,将同时改变CS和IP的内容。,16,7 0 7 0 7 0 7 0 7 0,OPCODE OFFSET-LOW OFFSET-HIGH SEG-LOW SEG-HIGH,指令执行时,将有: IP= 目标地址偏移量 CS=目标地址段基值,指令编码格式:,17,B
9、. 段间间接寻址目标地址存放在一个双字存储单元中低地址字单元内容为偏移量,高地址字单元内容为段基值。,指令编码格式:,指令执行时,将有: IP= (EA) EA字单元内容 CSB的情况为例进行分析。,22,AB可以分为以下几种情况:,1.A和B都为负数,若要AB,则A-B的结果一定是正数(SF=0),也不会发生溢出(OF=0),且结果不为零(ZF=0)。,2. A和B都为正数,若要AB,则A-B的结果一定是正数(SF=0),也不会发生溢出(OF=0),并且结果不为零(ZF=0)。,3.A为正数,B为负数,执行A-B的结果可能有两种情况:,(1)不发生溢出。这时结果为正数(SF=0),即有SF=
10、OF。,(2)发生溢出。这时结果变为负数(SF=1),即有SF=OF。,23,二、分支程序设计,分支程序的结构有两种常见结构:,1、用比较/测试指令+条件转移指令实现分支,比较指令:CMP DEST,SRC,该指令的功能与减法指令SUB相似,区别是(DEST)-(SRC)的差值不送入DEST。而其结果影响标志位。,24,这种类型的分支程序有两种结构,一条条件转移指令只能实现两条分支程序的设计。要实现更多条分支的程序,需使用多条条件转移指令。,25,例5.3.2 数据段的ARY数组中存放有10个无符号数,试找出其中最大者送入MAX单元。,算法分析:依次比较相邻两数的大小,将较大的送入AL中。每次
11、比较后,较大数存放在AL中,相当于较大的数往下传。比较一共要做9次。比较结束后,AL中存放的就是最大数。,26,DATA SEGMENTARY DB 17,5,40,0,67,12,34,78,32,10MAX DB ?DATA ENDS . MOV SI,OFFSET ARY ;SI指向ARY的第一个元素 MOV CX,9 ;CX作次数计数器 MOV AL,SI ;取第一个元素到ALLOP: INC SI ;SI指向后一个元素 CMP AL,SI ;比较两个数 JAE BIGER ;前元素后元素转移 MOV AL,SI ;取较大数到ALBIGER:DEC CX ;减1计数 JNZ LOP ;
12、未比较完转回去,否则顺序执行 MOV MAX,AL ;存最大数 .,27,例5.3.4 编写一程序,实现将存储器中的源数据块传送到目的数据块。,在存储器中两个数据块的存放有三种情况:两个数据块分离和有部分重叠。,28,三种相对位置情况的传送方法:,因此,我们设定:当源块首地址目的块首址的情况,必须从数据块首址开始传送。,对于源块与目的块有重叠且源块首址目的块首址的情况,必须从数据块末址开始传送。,29,SI=源数据块首址DI=目的数据块首址CX (DI) ?,形成末址SI=(SI)+(CX)-1DI=(DI)+(CX)-1,(DI)=(SI),SI=(SI)-1DI=(DI)-1,CX=(CX
13、)-1,(CX)=0?,(DI)=(SI),SI=(SI)+1DI=(DI)+1,CX目的块首址吗? JA TOP ;大于则转到TOP处,否则顺序执行 ADD SI,LENG-1 ;SI指向源块末址 ADD DI,LENG-1 ;DI指向目的块末址,32,BOTTOM: MOV AL,SI ;从末址开始传送 MOV DI, AL DEC SI DEC DI DEC CX JNE BOTTOM JMP END1 TOP: MOV AL,SI ;从首址开始传送 MOV DI,AL INC SI INC DI DEC CX JNE TOPEND1: MOV AH,4CH INT 21HCOSEG E
14、NDS END BEGIN,33,2、用跳转表形成多路分支,当程序的分支数量较多时,采用跳转表的方法可以使程序长度变短, 跳转表有两种构成方法:,(1)跳转表用入口地址构成,在程序中将各分支的入口地址组织成一个表放在数据段中,在程序中通过查表的方法获得各分支的入口地址。,34,例5.3.5 设某程序有10路分支,试根据变量N的值(110),将程序转移到其中的一路分支去。,设10路分支程序段的入口地址分别为:BRAN1、BRAN2.BRAN10。当变量N为1时,转移到BRAN1;N为2时,转移到BRAN2,依次类推。在跳转表中每两个字节存放一个入口地址的偏移量,如右图所示。,跳转表,程序中,先根
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第五 基本 程序设计 技术
限制150内