基本结构程序设计.ppt
《基本结构程序设计.ppt》由会员分享,可在线阅读,更多相关《基本结构程序设计.ppt(96页珍藏版)》请在三一办公上搜索。
1、本章内容:掌握顺序结构程序的设计;掌握分支转移指令的使用;掌握分支程序和循环程序的设计方法。,第5章 基本结构程序设计,本章要求,1.掌握顺序结构程序的设计方法,能利用汇编语言基本指令熟练进行顺序结构程序设计;2.熟练掌握分支转移指令的使用,如何生成有效测试标志,选择何种方式的转移指令。3.掌握分支程序设计方法;4.掌握循环程序设计方法及串指令的应用。,本章重点及难点:,汇编指令的综合应用及多分支、多重循环程序设计。,计划学时:8-10学时,顺序结构程序在设计上比较简单,它按指令书写的先后次序执行一系列操作,这种程序也称为直线程序。,组成,输入数据,已知的数据,即让计算机进行运算的对象,处理,
2、根据问题的需要对输入数据进行相应的运算处理,输出结果,将运算处理的结果输出,基本语句:数据传送指令、算术运算指令和逻辑运算指令,执行过程:,5.1 顺序结构程序设计,【例】:在屏幕上显示一个字符串:“WELCOME!”。,完整程序:DATA SEGMENT;数据段开始 STRING DB WELCOME!,13,10,$DATA ENDS;数据段结束 CODE SEGMENT;代码段开始 ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX;设置DS MOV AH,9;子功能号9,用于输出字符串 LEA DX,STRING;字符串偏移地址 INT
3、 21H;系统功能调用 MOV AX,4C00H;返回DOS INT 21H CODE ENDS;代码段结束 END START,【例】:对于三个8位无符号数86H、34H和21H,编写 RESULT=86H*34H-21H的程序。,DATA SEGMENTNUM DB 86H,34H,21HRESULT DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA SI,NUM MOV AL,SI MOV BL,SI+1 MUL BL;乘积放在AX MOV BL,SI+2 MOV BH,0;把BX
4、高位字节清零 SUB AX,BX MOV RESULT,AX;保存运算结果 MOV AH,4CH INT 21HCODE ENDS END START,【例】:以BUF为首址的内存中存有015的平方值表。查表求X单元中数(在015之间)的平方值,并送回X单元。,DATA SEGMENTBUF DB 0,1,4,9,16,25,36,49,64,81,100,121,144,169,196,225X DB 12DATA ENDSSTACK SEGMENT STACK STACK DB 100 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,
5、SS:STACK START:MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUF XOR AX,AX MOV AL,X ADD SI,AX MOV AL,SI MOV X,AL MOV AH,4CH INT 21H CODE ENDS END START,转移的目标地址直接出现在指令中,功能:无条件地使程序转移到指定的目标地址,类型,段内转移,改变IP的值,CS的值不变,直接方式,间接方式,转移的目标地址在寄存器或存储单元中,段间转移,改变IP和CS的值,直接方式,间接方式,格式:JMP 目标标号,功能:IP IP+disp,格式:JMP 字地址指针,功能:IP E
6、A,格式:JMP 目标标号,功能:IP OFFSET 目标标号 CS SEG 目标标号,格式:JMP 双地址指针,功能:IP EA CS EA+2,转移指令,5.2 分支程序设计,1.无条件转移指令JMP,功能:以某些标志位或标志位的逻辑运算为依据,满足条件,程序转移 至指定目标;不满足条件,程序顺序执行。,注意:条件转移的目标地址 在+127或-128字节的范围之内,分类:1.单个标志位的条件转移指令 2.组合条件的条件转移指令,2.条件转移指令,(1).单个标志位的条件转移指令,类型,C标志,JB/JNAE/JC,C=1时,转移,JAE/JNB/JNC,C=0时,转移,Z标志,JE/JZ,
7、Z=1时,转移,JNE/JNZ,Z=0时,转移,S标志,JS,S=1时,转移,JNS,S=0时,转移,P标志,JP/PE,P=1时,转移,JNP/JPO,P=0时,转移,O标志,JO,O=1时,转移,JNO,O=0时,转移,(2).组合条件的条件转移指令,(3).CX的值为0转移指令,格式:JCXZ,CX=0,转移,说明:(1)条件转移指令不影响标志位(2)条件转移指令前安排算术运算、比较、测试 等影响相应标志位的指令,无符号数:A 代表大于 B代表小于带符号数:G代表大于 L代表小于,分支程序基本执行流程,【例】:测试AX当前值是否为零,若为零,则置CX为50,否则令CX为200。,程序段一
8、:CMP AX,0 JZ L MOV CX,200 JMP NEXTL:MOV CX,50NEXT:,;比较AX是否为0,;若AX为0,即ZF=1则转移,;若AX不为0,则令CX=200,;跳转到NEXT,程序段二:CMP AX,0 JNZ L MOV CX,50 JMP NEXTL:MOV CX,200NEXT:,【例】:判断AX当前值的正负,若为正数,则置CX为50,否则令CX为200。,程序段一:CMP AX,0 JNS L MOV CX,200 JMP NEXTL:MOV CX,50NEXT:,;比较AX是否为0,影响SF标志,;若AX为正,即SF=0则转移,;若AX为负数,则令CX=
9、200,;跳转到NEXT,程序段二:ADD AX,0 JS L MOV CX,50 JMP NEXTL:MOV CX,200NEXT:,程序段三(用ZF测试):TEST AX,8000H JNZ L MOV CX,50 JMP NEXTL:MOV CX,200NEXT:,程序段四(用CF测试):BT AX,15 JC L MOV CX,50 JMP NEXTL:MOV CX,200NEXT:,程序段五(用CF测试):SHL AX,1 JC L MOV CX,50 JMP NEXTL:MOV CX,200NEXT:,【例】:已知X为16位的数,判断X是奇数还是偶数,若为奇数,则令Z=X,若为偶数
10、,令Z=0。,程序段一(用ZF测试):MOV AX,X TEST AX,1 JNZ L MOV Z,0 JMP NEXTL:MOV Z,AXNEXT:,程序段二(用CF测试):MOV AX,X BT AX,0 JC L MOV Z,0 JMP NEXTL:MOV Z,AXNEXT:,SHR AX,1,【例】:已知W为16位的数,若W为正数,则令Z=W,若为0,令Z=400H,若为负数,则Z=|W|+50H。,流程图片段,程序段一:MOV AX,W CMP AX,0 JZ L1 JNS L2 NEG AX ADD AX,50H MOV Z,AX JMP NEXT L2:MOV Z,AX JMP
11、NEXT L1:MOV Z,400H NEXT:,程序段二:MOV AX,W CMP AX,0 JNZ L1 MOV Z,400H JMP NEXT L1:JNS L2 NEG AX ADD AX,50H MOV Z,AX JMP NEXT L2:MOV Z,AX NEXT:,【例】:如果 X50,转到TOO_HIGH,不满足,X-Y;如果溢出转到 OVERFLOW,否则|X-Y|RESULT。,JO,JNS,程序段如下:MOV AX,X CMP AX,50 JG TOO_HIGH;大于则转移到TOO_HIGH SUB AX,Y OVERFLOW;溢出则转移 NONNEG;结果为正则转移 NE
12、G AXNONNEG:MOV RESULT,AXTOO_HIGH:OVERFLOW:,【例】:已知X为一个带符号数,比较X的值,若X大于55H,则令Y=X/2-30H,若X小于-1,则令Y=|X|,否则,Y=0。编程解决该问题。,MOV AX,X CMP AX,55H;第一次比较 JG XGY;大于则转移 CMP AX,-1;第二次比较 JL XLY;小于则转移 MOV Y,0;令Y=0 JMP EXITXLY:NEG AX;求绝对值 MOV Y,AX;结果送到Y JMP EXITXGY:SAR AX,1;大于,则执行Y=X/2-30H SUB AX,30H MOV Y,AX;结果送到YEXI
13、T:,5.2.2 双分支结构程序,1.双分支结构程序的典型结构,双分支结构程序的典型结构一,双分支结构程序的典型结构二,条件产生在进行条件测试以前,必须执行能生成状态标志的先行指令,如:TEST、CMP、ADD、SUB、AND、OR、XOR和移位指令等,这些指令执行后能按规定影响PSW中的状态标志位OF,SF,ZF,PF与CF。为条件检测作好准备。测试与定向 条件转移指令自动对相应的状态标志位进行测试,以确定是否满足条件,决定程序的不同走向。而每一条条件转移指令,恰好有两种选择,转移或顺序执行。标号 对于每个分支,在转移的目标地址处一定要给出标号。,需注意的问题,2.双分支结构程序设计举例,【
14、例】:设计字符比较程序,两个字符相同时,显示YES;否则显示NO,DATA SEGMENTD1 DB AD2 DB BRES1 DB YES,$RES2 DB NO,$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AL,D1 MOV BL,D2,CMP AL,BL JNE NEXT1 LEA DX,RES1 JMP NEXT2 NEXT1:LEA DX,RES2NEXT2:MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END START,【例
15、】:设存储单元A和B各有一无符号字节数,比较大小,将较大数送A单元,DATA SEGMENTA DB 39H B DB 0B4HDATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AL,A CMP AL,B JNC NEXT XCHG AL,B MOV A,AL NEXT:MOV AH,4CH INT 21HCODE ENDS END START,【例】比较两个带符号字节数的大小,找出两个数中大的存入MAX字节单元,编写源程序如下:DATA SEGMENT DA1 DB X1,X2;X1,X2为
16、任意二个带符号数 MAX DB?DATA ENDS STAK SEGMENT STACK DW 20H DUP(?)STAK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX MOV AL,DA1;取X1,送到AL中 CMP AL,DA1+1 JGE L1;若XX2则转到L1,这里产生分支 MOV AL,DA1+1;若XX2则DA1+1的内容送ALL1:MOV MAX,AL MOV AH,4CH INT 21H CODE ENDS END START,多分支结构程序设计,含义:程序有两个以上的分支,设计方法:双
17、分支方法、地址表法、转移表法、逻辑分解法,结构:,1.由多个双分支结构实现多分支结构程序设计,【例】:计算符号函数SNG(X)的值,DATA SEGMENT X DB 0B9H Y DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV AL,X CMP AL,0 JL NEXT1;X0则转NEXT2 MOV Y,0;X=0则令Y=0 JMP RES,源程序如下:,NEXT1:MOV Y,0FFH JMP RES NEXT2:MOV Y,1 RES:MOV AH,4CH INT 21H CO
18、DE ENDS END START,2.转移表法多分支程序设计,设计方法:把转移到各分支程序段的转移指令依次存放在一起,形成转移表。各转移指令在表中的位置:离表首地址的偏移量作为转移条件,偏移量加上表首地址作为转移地址,转到表的相应位置,执行相应的无条件转移指令,典型例子:JMP BX TAB:JMP SHORT MODE0;转移表 JMP SHORT MODE1 JMP SHORT MODE2 JMP SHORT MODE3 JMP SHORT MODE4,说明:转移表中每条转移指令(段内短转移)占用2个字节,所以有如下计算公式:表地址=模式字*2+转移表首地址,【例】:根据输入值(04)的
19、不同,执行不同的操作,用转移表法编写程序,CODE SEGMENT ASSUME CS:CODE START:LEA BX,BRATAB;取转移表首地址 MOV AH,1 INT 21H;从键盘接收一个字符 SUB AL,30H;ASCII数值 MOV AH,0 ADD AX,AX;AX乘2 ADD BX,AX;获取跳转地址 JMP BXBRATAB:JMP SHORT MODE0;转移表 JMP SHORT MODE1 JMP SHORT MODE2 JMP SHORT MODE3 JMP SHORT MODE4,MODE0:MOV DL,30H JMP EXITMODE1:MOV DL,3
20、1H JMP EXIT MODE2:MOV DL,32H JMP EXIT MODE3:MOV DL,33H JMP EXIT MODE4:MOV DL,34H EXIT:MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START,3.利用地址表法实现多分支程序设计,设计方法:把各分支程序段的入口地址依次存放在数据段的一个表中,形成地址表。取各分支程序段的编号作为各分支入口地址的表地址的位移量。某个分支程序入口地址的表地址为:表地址=编号*2+入口地址首地址,ADTAB DW ADDR0,ADDR1,ADDR2,ADDR3,ADDR4 LEA
21、 BX,ADTAB;取转移表首地址 MOV AL,NUM;NUM数值送AL MOV AH,0 SHL AX,1;AX乘2 ADD BX,AX;获取跳转地址 JMP BX,【例】:根据NUM(04)的不同,执行不同的操作,用地址表法编写程序,DATA SEGMENT NUM DB 2 ADTAB DW ADDR0,ADDR1,ADDR2,ADDR3,ADDR4DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA BX,ADTAB;取转移表首地址 MOV AL,NUM;NUM数值送AL MOV AH
22、,0 SHL AX,1;AX乘2 ADD BX,AX;获取跳转地址 JMP BX,ADDR0:MOV DL,30H JMP EXITADDR1:MOV DL,31H JMP EXITADDR2:MOV DL,32H JMP EXITADDR3:MOV DL,33H JMP EXITADDR4:MOV DL,34H EXIT:MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START,MOV AL,NUM;NUM数值送AL MOV AH,0 SHL AX,1;AX乘2 MOV SI,AX JMP ADTABSI,4.逻辑分解法多分支程序设计,设
23、计方法:将多分支结构采用逻辑等效的方法,按条件的先后,依次分解成所示的一串双分支结构,然后使用双分支的方法来进行程序设计。,NEXT0:MOV DL,30H JMP EXITNEXT1:MOV DL,31H JMP EXITNEXT2:MOV DL,32H JMP EXITNEXT3:MOV DL,33H JMP EXITNEXT4:MOV DL,34H EXIT:MOV AH,2 INT 21H MOV AH,4CH INT 21H CODE ENDS END START,DATA SEGMENT NUM DB 2DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS
24、:DATA START:MOV AX,DATA MOV DS,AX MOV AL,NUM CMP AL,0 JZ NEXT0 CMP AL,1 JZ NEXT1 CMP AL,2 JZ NEXT2 CMP AL,3 JZ NEXT3 CMP AL,4 JZ NEXT4,【例】:根据AL中的值(04),执行不同的操作,用逻辑分解法编写程序。,【例】:已知有四个16位带符号数W、X、Y和Z,试编写程序,若四个数中有一个为0,则把另外三个单元清零;若四个数都不为0,则求其累加和(不考虑溢出),并保存到BUF单元中。,参考程序:DATA SEGMENT W DW?;定义变量 X DW?Y DW?Z D
25、W?BUF DW?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,分支程序设计综合举例,START:MOV AX,DATA MOV DS,AX CMP X,0 JZ ZERO CMP Y,0 JZ ZERO CMP Z,0 JZ ZERO CMP W,0 JZ ZERO MOV AX,W ADD AX,X;四个数累加 ADD AX,Y ADD AX,Z MOV BUF,AX JMP NEXT,;置四个数为0ZERO:MOV W,0 MOV X,0 MOV Y,0 MOV Z,0NEXT:MOV AH,4CH INT 21HCODE ENDS END S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基本 结构 程序设计
链接地址:https://www.31ppt.com/p-6043050.html