1、单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,第,5,章 转移指令与分支结构程序设计,汇编语言程序设计,本章主要教学内容,1.,转移指令。,2.,分支程序的基本结构和设计方法。,本章主要教学目的及要求,1.,理解掌握转移指令;,2.,掌握分支程序的基本结构和设计方法;,3.,能利用转移指令熟练设计分支程序。,5/23/2026,1,转移的目标地址直接出现在指令中,5.1,转移指令,功能:无条件地使程序转移到指定的目标地址,类型,段内转移,改变,IP,的值,,CS,的值不变,直接方式,间接方式,转移的目标地址在寄存器或存储单元中,段间转移,改变,IP
2、和,CS,的值,直接方式,间接方式,格式:,JMP,目标标号,功能:,IP IP+,disp,格式:,JMP,字地址指针,功能:,IP EA,格式:,JMP,目标标号,功能:,IP OFFSET,目标标号,CS SEG,目标标号,格式:,JMP,双地址指针,功能:,IP EA,CS EA+2,5.1.1,无条件转移指令,JMP,(,jump,),5/23/2026,2,5.1.2,条件转移指令,功能:以某些标志位或标志位的逻辑运算为依据,满足条件,程序转移,至指定目标;不满足条件,程序顺序执行。,注意,:,条件转移的目标地址 在,+127,或,-128,字节的范围之内,分类:,1.,单个标志
3、位的条件转移指令,2.,组合条件的条件转移指令,5/23/2026,3,1.,单个标志位的条件转移指令,类型,C,标志,JB/JNAE/JC,C=1,时,转移,JAE/JNB/JNC,C=0,时,转移,Z,标志,JE/JZ,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,时,转移,5/23/2026,4,2.,组合条件的条件转移指令,类型,无符号数,JA/JNBE,CZ=0,,,转移,JBE/JNA,CZ=1
4、转移,带符号数,JG/JNLE,(,SO=0,),(,Z=0,),,,转移,JGE/JNL,(,SO=0,),,,转移,JL/JNGE,(,SO=1,),(,Z=0,),,,转移,JLE/JNG,(,SO=1,),(,Z=1,),,,转移,5/23/2026,5,3.CX,的值为,0,转移指令,格式,:,JCXZ,CX=0,,,转移,说明:(,1,)条件转移指令不影响标志位,(,2,),条件转移指令前安排算术运算、比较、测试,等影响相应标志位的指令,5/23/2026,6,5.2.1,双分支结构程序,1.,双分支结构程序的典型结构,条件,满足,不满足,程序段,1,JMP,程序段,2,例,
5、将,AL,的最高位显示出来,SHL AL,1,JC NT1,MOV DL,30H,JMP NT2,NT1:MOV DL,31H,NT2:MOV AH,02H,INT 21H,双分支结构程序的典型结构一,5.2,分支结构程序设计,满足,不满足,条件,程序段,双分支结构程序的典型结构二,例,:,计算某个数的绝对值,CMP AX,0,JGE NT,NEG AX,NT:MOV RES,AX,Y,N,AX,0,求补,送结果,开始,JMP,Y,N,CF=1,DL=0,DL=1,显示,开始,5/23/2026,7,2.,双分支结构程序设计举例,例,:,设计字符比较程序,两个字符相同时,显示,YES,;否
6、则显示,NO,DATA SEGMENT,D1 DB A,D2 DB B,RES1 DB YES,$,RES2 DB NO,$,DATA ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,START: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,RES2,NEXT2:MOV AH,09H,INT 21H,MOV AH,4CH,INT 21H,CODE ENDS,END START,N,Y,相同,?,显示,NO,显示,Y
7、ES,取数,开始,返回,5/23/2026,8,例,:,设存储单元,A,和,B,各有一无符号字节数,比较大小,将较大数送,A,单元,DATA SEGMENT,A DB 39H,B DB 0B4H,DATA ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,START: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 21H,CODE ENDS,END START,取数,Y,N,A,B,A,、,B,交换,开始,返回,5/23/2026,9,
8、5.2.2,多分支结构程序设计,含义,:,程序有两个以上的分支,设计方法,:,双分支方法、地址表法、转移表法、,逻辑分解法,结构,:,条件,=?,X1,X2,Xn,其它,程序段,1,程序段,2,程序段,0,程序段,n,5/23/2026,10,1.,由多个双分支结构实现多分支结构程序设计,例,:,计算符号函数,SNG,(,X,)的值,DATA SEGMENT,X DB 0B9H,Y DB?,DATA ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA START:MOV AX,DATA,MOV DS,AX,MOV AL,X,CMP AL,0,JL NEXT1,CM
9、P AL,0,JG NEXT2,MOV Y,0,JMP RES,NEXT1:MOV Y,0FFH,JMP RES,NEXT2:MOV Y,1,RES:MOV AH,4CH,INT 21H,CODE ENDS,END START,符号函数:,1,当,X0,时,Y=0,当,X=0,时,-1,当,X0,时,Y,N,Y,N,AL,X,AL0,Y,1,Y,0,开始,返回,5/23/2026,11,2.,利用地址表法实现多分支程序设计,设计方法,:,把各分支程序段的入口地址依次存放在数据段的一个表中,形成地址表。取各分支程序段的编号作为各分支入口地址的表地址的位移量。,某个分支程序入口地址的表地址为:,表
10、地址,=,编号*,2+,入口地址首地址,例,:,用地址表法编写程序实现从低到高逐位检测一个字节数据,找出第一个非,0,的位数。检测时,为,0,则继续检测,为,1,则转移到对应的处理程序段显示相应的位数,取数,右移,显示相应的位数,显示,?,Y,N,=0?,Y,N,CF=0?,开始,结束,5/23/2026,12,JMP DISP,AD1:MOV DL,1,JMP DISP,AD2:MOV DL,2,JMP DISP,AD3:MOV DL,3,JMP DISP,AD4:MOV DL,4,JMP DISP,AD5:MOV DL,5,JMP DISP,AD6:MOV DL,6,JMP DISP,AD
11、7:MOV DL,7,DISP:MOV AH,2,INT 21H,MOV AH,4CH,INT 21H,CODE ENDS,END START,DATA SEGMENT,NUM DB 78H,ADTAB DW AD0,AD1,AD 2,AD3,AD4,AD5,AD6,AD7,DATA ENDS,CODE SEGMENT,ASSUME CS:CODE,DS:DATA,START:MOV AX,DATA,MOV DS,AX,MOV AL,NUM,MOV DL,?,CMP AL,0,JZ DISP,MOV BX,0,AGAIN:SHR AL,1,JC NEXT,INC BX,JMP AGAIN,NE
12、XT:SHL BX,1,JMP ADTABBX,AD0:MOV DL,0,5/23/2026,13,3.,转移表法多分支程序设计,设计方法,:,把转移到各分支程序段的转移指令依次存放在一起,形成转移表。各转移指令在表中的位置,离表首地址的偏移量作为转移条件,偏移量加上表首地址作为转移地址,转到表的相应位置,执行相应的无条件转移指令,例,:,根据输入值(,04,)的不同,执行不同的操作,用转移表法编写程序,转移表首地址送,BX,输入值乘,2,送,AX,BX,BX+AX,JMP BX,JMP MODE0,JMP MODE4,MODE0,MODE4,开始,5/23/2026,14,MODE0:MOV
13、 DL,30H,JMP EXIT,MODE1:MOV DL,31H,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,CODE SEGMENT,ASSUME CS:CODE,START:LEA BX,TAB,MOV AH,1,INT 21H,SUB AL,30H,MOV AH,0,ADD AX,AX,ADD BX,AX,JMP BX,TAB:JMP SHORT MODE
14、0,;转移表,JMP SHORT MODE1,JMP SHORT MODE2,JMP SHORT MODE3,JMP SHORT MODE4,说明:转移表中每条转移指令(段内短转移)占用,2,个字节,所以有如下计算公式:,表地址,=,模式字*,2+,转移表首地址,5/23/2026,15,4.,逻辑分解法多分支程序设计,Y,Y,N,N,N,Y,图,5-12,逻辑分解法分支结构框图,条件,1,成立,程序段,1,条件,2,成立,程序段,2,条件,n,成立,程序段,n+1,程序段,n,设计方法,:,将多分支结构采用逻辑等效的方法,按条件的先后,依次分解成图,5-12,所示的一串双分支结构,然后使用双
15、分支的方法来进行程序设计。,5/23/2026,16,例:根据,AL,中的值(,04,),执行不同的操作,用逻辑分解法编写程序,NEXT0:MOV DL,30H,JMP EXIT,NEXT1:MOV DL,31H,JMP EXIT,NEXT2:MOV DL,32H,JMP EXIT,NEXT3:MOV DL,33H,JMP EXIT,NEXT4:MOV DL,34H,EXIT:MOV AH,2,INT 21H,MOV AH,4CH,INT 21H,CODE ENDS,END START,DATA SEGMENT,NUM DB 2,DATA ENDS,CODE SEGMENT,ASSUME CS
16、CODE,DS: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,5/23/2026,17,本章小结,本章主要介绍了转移指令和分支结构程序设计。,转移指令分无条件转移指令和条件转移指令。,无条件转移指令有:段内直接转移、段内间接转移、段间直接转移、,段间间接转移等形式。条件转移指令有:单条件转移指令、组合条件转移,指令。,分支程序分为双分支程序和多分支程序。,多分支程序的设计方法主要有:转移表法、地址表法和逻辑分解法。,5/23/2026,18,






