分享
分销 收藏 举报 申诉 / 67

类型第讲第章控制转移和程序结构.ppt

  • 上传人:鼓***
  • 文档编号:14732540
  • 上传时间:2026-11-09
  • 格式:PPT
  • 页数:67
  • 大小:2.94MB
  • 下载积分:8 金币
  • 配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    第讲第章 控制 转移 程序结构
    资源描述:
    单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,09 十一月 2026,第讲第章控制转移和程序结构,标准流程图符号,汇编语言程序的基本结构,1.顺序结构,2.分支程序结构,循环程序结构,IP(或EIP),线性增加,IP,(或EIP),受,标志位,的影响而,跳变,IP,(或EIP),因,计数器CX(或ECX),中的,值不为零而循环,例.顺序结构程序,要求:,用查表法将,一位,十六进制,数转换成相应的ASCII码,DATASEGMENT,TABLEDB30H,31H,32H,33H,34H,35H,36H,37H,DB 38H,39H,41H,42H,43H,44H,45H,46H,HEXDB 4,ASCIDB?,DATAENDS,STACKSEGMENT,STACK,DW20H DUP(0),STACKENDS,COSEG SEGMENT,ASSUMECS:COSEG,DS:DATA,SS:STACK,BEING:MOVAX,DATA,MOVDS,AX,MOVBX,OFFSET TABLE,MOVAH,0,MOVAL,HEX,ADDBX,AX,MOVAL,BX,MOVASCI,AL,MOVAH,4CH,INT21H,COSEGENDS,ENDBEING,XLAT,XLAT ;ALBX+AL,当改变了,EIP,或,CS,就改变了程序的,执行顺序,即实现了程序的,控制转移,第5章 控制转移和程序结构,5.1 目标地址寻址方式,5.1.1 转移范围,5.1.2 寻址方式,5.1.3 无条件转移指令,5.2 分支程序结构,5.2.1 条件转移指令,5.2.2 单分支结构,5.2.3 双分支结构,5.2.4 多分支结构,5.3 循环程序结构,5.3.1 循环指令,5.3.2 计数控制循环,5.3.3 条件控制循环,5.4 子程序结构,5.4.1 子程序指令,5.4.2 子程序设计,5.4.3 参数传递,5.4.4 程序模块,5.1 目标地址寻址方式,5.1.1 转移范围,5.1.2 寻址方式,5.1.3 无条件转移指令,5.1.1,程序,转移范围,段内,转移,在当前代码段内的转移,不改CS,只改EIP,近转移(,Near,),16位段:16位近转移NEAR16,32位段:32位近转移NEAR32,短转移(,Short,),转移范围,-128,127,字节,段间,转移,从,当前,代码段跳转到,另一个,代码段,改CS和EIP,远转移(,Far,),16位段:32位远转移FAR16,32位段:48位远转移FAR32,5.1.2,目标地址,寻址方式,1.相对寻址方式,2.直接寻址方式,3.间接寻址方式,类似于存储器数据的寻址方式,指明目标地址的方法,1.相对寻址方式,指令代码,提供,目标地址,相对于,当前指令,指针EIP的,位移量,目标地址(转移后的EIP)当前EIP位移量,特点,都是段内转移,最常用、最灵活,2.直接寻址方式,指令代码,直接提供,目标地址,目标地址(转移后的CS和EIP)指令操作数,3.间接寻址方式,指令代码,给出存放目标地址的寄存器或存储单元,分类,寄存器间接寻址,用寄存器保存目标地址,存储器间接寻址,用存储单元保存目标地址,5.1.3 无条件转移指令,JMP,作用,无条件,改变程序执行顺序,格式,段内相对寻址 或 段间直接寻址,JMP label,;程序,转向,label标号指定的地址,寄存器间接寻址,JMP reg16/reg32,;程序,转向,寄存器指定的地址,存储器间接寻址,JMP mem16/mem32,;程序,转向,存储单元指定的地址,JMP指令的4种类型,1.段,内,转移,(1),相对,寻址,标号,指明,目标地址,,指令代码包含,位移量,(2)间接寻址,通用,寄存器,或,主存单元,包含,目标指令的,偏移地址,2.段,间,转移,(1)直接寻址,标号,包含,目标指令,的,段地址,和,偏移地址,(2)间接寻址,16位段:用双字,存储单元,包含,目标地址,32位段:用3字,存储单元,包含,目标地址,1.段,内,转移(1)相对寻址,段内直接,短,转移,JMP,SHORT,lable;IP,IP+8位偏移量(有符号),段内直接,近,转移,JMP,NEAR PTR,lable;IP,IP+16位位移量(有符号),操作码,EB 位移量,E9,位移量(低),位移量(高),操作码,位移量=,标号,偏移地址,当前,IP值,(JMP指令的,下一条指令,的IP值),注意,标号、逻辑段名、子程序名也有,地址,和,类型,属性,例.,标号,next,:addal,01h,逻辑段名,datas,SEGMENT,datas,ENDS,子程序名,dpchar,proc,dpchar,endp,例1.,段内直接短转移,JMP SHORT next,操作码,EB 位移量,;next的(IP)当前(IP)+D8,例2.,段内直接近转移,JMP,NEAR PTR,NEXT,设(1),标号,NEXT的 EA=1000H,(2)JMP 指令的当前IP为0009H,求:位移量=,?,指令代码 E9,F7 0F,(代表,JMP 1000H,),1000H0009H=,0FF7H,E9,位移量,(低),位移量,(高),操作码,1.段,内,转移(2)间接寻址,寄存器间接寻址,JMPreg;IP,reg,存储器间接寻址,JMPmem;IP,EA,属于绝对转移,例1.,设CS=3000H,IP=2400H,BX=3100H,JMP BX,指令执行后,IP=,?,例2.,设DS=2000H,BX1000H,21020H=34H,21021H=12H,JMP WORD PTR BX+20H,指令执行后,IP=,?,3100H,1234H,例题5-1无条件转移程序-1,;数据段,0000,0000,nvardw?,;代码段,0010,EB,01,jmp,labl1,0012,90,nop,0013,B8 FF02,labl1:mov ax,type,labl1,0016,E9,0001,jmp,near,ptr labl2,0019,90,nop,001A,B8 0020 R,labl2:mov ax,offset,labl3,001D,FF E0,jmp,ax,001F,90,nop,0020,B8 002B R,labl3:mov ax,offset,labl4,0023,A3 0000 R,mov nvar,ax,0026,FF 26 0000 R,jmp,nvar,002A,90,nop,相对短转移,相对近转移,寄存器间接近转移,存储器间接近转移,2.段,间,转移(1)直接寻址,段间,直接,转移,JMP,FAR PTR,lable;IP,lable的,段内,偏移地址,;CS,lable所在段的,段地址,属于绝对转移,操作码,EA,IP,(低),IP,(高),CS,(低,),CS,(高,),例1.,C1 SEGMENT,JMP FAR PTR next_prog,C1 ENDS,C2 SEGMINT,next_prog:,C2 ENDS,EA,5 0,0 2,0 0,2 0,OP码,新(IP)=0250H,新(CS)=2000H,JMP指令,C1段,C2段,20000H,next_prog:,20250H,操作码,EA,IP,(低),IP,(高),CS,(低,),CS,(高,),2.段,间,转移(2)间接寻址,存储器间接寻址,JMPmem;IP,EA,;CS,EA+,2,属于绝对转移,例.,MOVSI,0100H,JMP,DWORD,PTR SI,执行这段程序后:,(a)把 DS:SI 即 DS:0100H 和 DS:0101H,两单元的字,送,?,;,(b)而把 DS:0102H 和 DS:0103H,两单元的字,送,?,;,(c)程序转入由新的CS和新的IP决定的目标地址。,IP,CS,例题5-1无条件转移程序-2,;数据段,0002,00000000,fvardd?,;代码段,002B,B8 FF05,labl4:mov ax,type far ptr,labl5,002E,EA,-,0034,R,jmp,far ptr,labl5,0033,90,nop,0034,B8 0047 R,labl5:mov ax,offset,labl6,0037,A3 0002 R,mov,word ptr,fvar,ax,003A,BA-R,mov dx,seg,labl6,003D,89 16 0004 R,mov,word ptr,fvar+2,dx,0041,FF 2E 0002 R,jmp,fvar,0045,90,nop,0046,labl6:,直接远转移,存储器间接,远,转移,5.2 分支程序结构,5.2.1 条件转移指令,5.2.2 单分支结构,5.2.3 双分支结构,5.2.4 多分支结构,5.2.1 条件转移指令,Jcc,作用,根据,上一条,指令所设置的标志位,,,确定程序是否转移,格式,Jcc,label,cc:转移条件,label:目标地址(采用,段内,相对寻址方式),16位80 x86:只是-128+127间的短转移,32位IA-32:达到32位的全偏移量,特点:,利用,但,不影响,标志位,1.cc转移条件分类,16种、两类,单个标志状态,ZF、SF、PF、OF、CF,两数大小关系,等于(,Equal,),无符号数,高(,A,bove,),、低(,B,elow,),有符号数,大(,G,reater,),、小(,L,ess,),(1)单个标志状态,JZ/JE,ZF=1,Jump if Zero/Equal,JNZ/JNE,ZF=0,Jump if Not Zero/Not Equal,JS,SF=1,Jump if Sign,JNS,SF=0,Jump if Not Sign,JP/JPE,PF=1,Jump if Parity/Parity Even,JNP/JPO,PF=0,Jump if Not Parity/Parity Odd,JO,OF=1,Jump if Overflow,JNO,OF=0,Jump if Not Overflow,JC,CF=1,Jump if Carry,JNC,CF=0,Jump if Not Carry,单个标志状态作为条件的,功能,JZ(JE)和JNZ(JNE):ZF,是零(相等)还是非零(不等),JS和JNS:SF,是负还是正,JO和JNO:OF,溢出还是没有溢出,JP(JPE)和JNP(JPO):PF,低字节“1”的个数是偶数还是奇数,JC和JNC:CF,有进位(为1)还是无进位(为0),例1.,单个条件标志作为条件,(a),ADDAL,AL,JCTOOBIG;若,有进位,,转移至TOOBIG,(b),CMPAL,BL,JZZERO ;若,相等,,则转移至ZERO,例题5-2实现指令CBW功能的程序-1,8086指令,CBW,等价于IA-32指令:,MOVSX AX,AL,功能,如果AL最高位为0,则:AH0,否则:AHFFH,例题5-2实现指令CBW功能的程序-2,mov al,bvar,;取出要判断的数据,test,al,80h,;测试最高位,jz,next1,;最高位为0(ZF1),则转移,mov ah,0ffh,;最高位为1,则顺序执行,jmp,done,;无条件跳过另一个分支,next1:mov ah,0,;最高位为0转移到此执行,done:,例题5-2实现指令CBW功能的程序-3,mov al,bvar,;取出要判断的数据,test al,80h,;测试最高位,jnz,next2,;最高位为1(ZF0),则转移,mov ah,0,;最高位为0,则顺序执行,jmp,done,;无条件跳过另一个分支,next2:mov ah,0ffh,;最高位为1转移到此执行,done:,例题5-2实现指令CBW功能的程序-4,mov al,bvar,;取出要判断的数据,cmp,al,0,;与0比较,jns,next3,;最高位为0(SF0),则转移,mov ah,0ffh,;最高位为1,则顺序执行,jmp,done,;无条件跳过另一个分支,next3:mov ah,0,;最高位为0转移到此执行,done:,例题5-3实现奇偶校验程序-1,奇偶校验,使数据中包括校验位在内的“1”的个数,恒为奇数,奇校验,恒为偶数(包括0),偶校验,奇偶校验特点,只能检测出错,不能纠错,奇偶校验标志:PF,例题5-3实现奇偶校验程序-2,mov ah,1,;1号功能,int 21h,;键盘输入,返回值在AL,and al,7fh,;最高位置“0”,;PF反映“1”个数的奇偶,jnp,next1,;个数为奇数,则转向NEXT1,or al,80h,;最高位置“1”、其他位不变,next1:mov Tdata,al,;保存待发送的数据,DOS功能调用,INT 21H,功能编号,AH01H,出口参数,ALASCII字符,功能说明,键盘输入一个字符(回显),奇校验,例题5-4统计“1”位个数程序-1,mov ah,1,int 21h,;输入一个字符,xor ah,ah,;AH记录1的个数,故先清0,mov ecx,8,;ASCII码有8位,8次循环判断,again:shl al,1,;从高位开始,jnc,next,;不为1,无需处理,inc ah,;为1,个数加1,next:loop again,例题5-4统计“1”位个数程序-2,mov ah,1,int 21h,;输入一个字符,xor ah,ah,;AH记录1的个数,故先清0,again:cmp al,0,;也可用“TEST AL,0FFH”,je,done,shr al,1,;从低位开始,jnc,next,;不为1,无须处理,inc ah,;为1,个数加1,next:jmp again,done:,好在哪里?,(2)两数大小关系,无符号数,JB/JNAE,CF=1,Jump if,B,elow/,N,ot,A,bove or,E,qual,JNB/JAE,CF=0,Jump if,N,ot,B,elow/,A,bove or,E,qual,JBE/JNA,CF=1或ZF=1,Jump if,B,elow or,E,qual/,N,ot,A,bove,JNBE/JA,CF=0且ZF=0,Jump if,N,ot,B,elow or,E,qual/,A,bove,有符号数,JL/JNGE,SFOF,Jump if,L,ess/,N,ot,G,reater or,E,qual,JNL/JGE,SF=OF,Jump if,N,ot,L,ess/,G,reater or,E,qual,JLE/JNG,SFOF或ZF=1,Jump if,L,ess or,E,qual/,N,ot,G,reater,JNLE/JG,SF=OF且ZF=0,Jump if,N,ot,L,ess or,E,qual/,G,reater,两数大小关系作为条件的,功能,无符号数用高(Above)、低(Below),低于(不高于等于):,JB(JNAE),不低于(高于等于):,JNB(JAE),低于等于(不高于):,JBE(JNA),不低于等于(高于):,JNBE(JA),有符号数用大(Greater)、小(Less),小于(不大于等于):,JL(JNGE),不小于(大于等于):,JNL(JGE),小于等于(不大于):,JLE(JNG),不小于等于(大于):,JNLE(JG),例1.,两数大小关系作为条件,按递增序排列两个,无符号,数,第一个数偏移地址BX,第二个数偏移地址DI。,MOVAX,BX,CMPAX,DI,JBEDONE ;第一个数低于或等于第二个,XCHGAX,DI;第一个数大于第二个,交换,MOVBX,AX,DONE:,例2.,比较 01H 和 0FEH 两个数的大小,M0V AL,01H,CMP AL,0FEH,设执行后:AL01H,CF1,OF0,SF0,ZF0,(a)若 01H 和 0FEH 为无符号数,判断大小:“高于”或“低于”等指令(JA/JNBE),转移标志位:CF、ZF,(b)若 01H 和 0FEH 为带符号数,判断大小:“大于”或“小于”等指令指令(JG/JNLE),转移标志位 SF、OF、ZF,条件跳转指令的测试和转移条件,Above/Below,Greater/Less,注意:,无符号数,和,有符号数,是否相等,均可用,JE/JZ,或,JNE/JNZ,5.2.2 单分支结构,5.2.3 双分支结构,5.2.4 多分支结构,5.2.2 单分支结构,选好条件转移指令:,当条件满足,发生转移,跳过分支体;,条件不满足,顺序执行分支体。,5.2.3 双分支结构,选好条件转移指令:,顺序执行的分支体要有,JMP,指令跳过另一个分支体,例题5-5比较两数大小程序,mov ax,wvar1,;取第一个数据,cmp,ax,wvar2,;与第二个数据比较,je,equal,;两数相等,转移,jnb,first,;第一个数据大,转移,mov dx,offset msg2,;第二个数据大,jmp,done,first:mov dx,offset msg1,jmp,done,equal:mov dx,offset msg0,done:,mov ah,9,;显示结果,int 21h,无符号数还是有符号数?,;数据段,wvar1 dw 3765h,wvar2 dw 8930h,msg0 db Equal!$,msg1 db First!$,msg2 db Second!$,例题5-6求绝对值程序,;数据段,dvardd 0bd630422h,;有符号数据,resultdd?,;保存绝对值,;代码段,mov eax,dvar,cmp eax,0,;比较EAX与0,jge nonneg,;条件满足:AX0,转移,neg eax,;AX0,负数需求补得正值,nonneg,:mov result,eax,;分支结束,保存结果,IF-THEN结构,例题5-7BCD码显示程序,mov dl,BCD,;取BCD码,test dl,0f0h,;如果高位是0,不显示,jz one,shr dl,4,;BCD码高位右移为低位,or dl,30h,;转换为ASCII码,mov ah,2,;显示,int 21h,mov dl,BCD,;取BCD码,and dl,0fh,;只取二进制低4位,one:,or dl,30h,;转换低位为ASCII码,mov ah,2,;显示,int 21h,add dl,30h,例题5-8显示数据最高位程序-1,;数据段,dvardd 0bd630422h,;有符号数据,;代码段,mov ebx,dvar,shl ebx,1,;EBX最高位移入CF标志,jc one,;CF1,最高位为1,转移,mov dl,0,;CF0,最高位为0:DL0,jmp two,;一定要跳过另一个分支体,one:,mov dl,1,;DL1,two:,mov ah,2,int 21h,;显示,IF-THEN-ELSE结构,例题5-8显示数据最高位程序-2,;数据段,dvardd 0bd630422h,;有符号数据,;代码段,mov ebx,dvar,mov dl,0,;假设最高位为0:DL0,shl ebx,1,;EBX最高位移入CF标志,jnc two,;CF0,即最高位为0,转移,mov dl,1,;CF1,最高位为1,DL1,two:,mov ah,2,int 21h,;显示,IF-THEN结构,例题5-8显示数据最高位程序-3,;数据段,dvardd 0bd630422h,;有符号数据,;代码段,mov ebx,dvar,mov dl,0,shl ebx,1,;EBX最高位移入CF标志,adc dl,0,;最高位为0,CF0,DL000,;最高位为1,CF1,DL101,mov ah,2,;显示,int 21h,顺序结构,例题5-9有符号数运算溢出程序,;代码段,mov eax,dvar1,sub eax,dvar2,;求差,jo error,;有溢出,转移,mov dvar3,eax,;无溢出,保存差值,lea dx,okmsg,;显示正确,jmp disp,error:,lea dx,errmsg,;显示错误,disp:,mov ah,9,int 21h,例1.,求补码数X,补,的绝对值,并送回原处。,;X,0,;X,0,可得如下关系式:,;X,0,;X,0,典型的IF-THEN-ELSE程序结构,DATASSEGMENT,XADRDW 3456H;设X补=3456H,DATASENDS,STACKSSEGMENT,STACK,BOTTOWDW256 DUP(?);定义堆栈段,预留256个单元,TOP=$-BOTTOW,STACKSENDS,CODESSEGMENT,ASSUMECS:CODES,DS:DATAS,SS:STACKS,START:,MOVAX,STACKS;将堆栈段段址送SS,MOVSS,AX,MOVSP,TOP;使SP指向栈底地址,MOVAX,DATAS;将数段段址送DS,MOVDS,AX,DONE:MOVAH,4CH;返回PC-DOS状态,INT21H,CODESENDS,ENDSTART,可以省略,求补码程序段,求补码程序段,MOV AX,XADR ;取x,补,到AX,AND AX,AX;设置标志位,JNS DONE ;若x0,转DONE,NEG AX ;若0,求补得到|x|,MOV XADR,AX ;将|x|送回原处,DATASSEGMENT,XADRDW 3456H;设X补=3456H,DATASENDS,STACKSSEGMENTSTACK,BOTTOWDW 256 DUP(?);定义堆栈段,预留256个单元,STACKSENDS,CODESSEGMENT,ASSUMECS:CODES,DS:DATAS,SS:STACKS,START:MOVAX,DATAS;将数段段址送DS,MOVDS,AX,MOVAX,XADR;取x补到AX,ANDAX,AX;设置标志位,JNSDONE;若x0,转DONE,NEGAX;若0,求补得到|x|,MOVXADR,AX;将|x|送回原处,DONE:MOVAH,4CH;返回PC-DOS状态,INT21H,CODESENDS,ENDSTART,5.2.4 多分支结构,分支处理中又有分支,具有多个分支走向。,可用单分支和双分支实现多个分支结构。,AH=0,fuction0,Y,N,AH=1,fuction1,Y,N,AH=2,fuction2,Y,N,例题5-10利用地址表实现多分支程序-1,;数据段,msgdb Input number(19):,$,crlfdb 0dh,0ah,$;回车换行符,msg1db Chapter 1,0dh,0ah,$,msg9db Chapter 9,0dh,0ah,$,tabledw disp1,disp2,disp3,disp4,disp5,dw disp6,disp7,disp8,disp9;入口地址表,例题5-10利用地址表实现多分支程序-2,disp1:mov dx,offset msg1;分支程序1,jmp start2,disp2:mov dx,offset msg2;分支程序2,jmp start2,disp3:mov dx,offset msg3;分支程序3,jmp start2,disp4:mov dx,offset msg4;分支程序4,jmp start2,disp5:mov dx,offset msg5;分支程序5,jmp start2,disp6:mov dx,offset msg6;分支程序6,jmp start2,disp7:mov dx,offset msg7;分支程序7,jmp start2,disp8:mov dx,offset msg8;分支程序8,jmp start2,disp9:mov dx,offset msg9;分支程序9,jmp start2,;,start2:mov ah,9;显示,int 21h,例题5-10利用地址表实现多分支程序-3,;代码段,start1:mov dx,offset msg,;提示输入数字,mov ah,9,int 21h,mov ah,1,;等待按键,int 21h,push ax,mov dx,offset crlf,;回车换行,mov ah,9,int 21h,pop ax,;AL数字的ASCII码,例题5-10利用地址表实现多分支程序-4,cmp al,1,;数字 9?,ja start1,and ax,000fh,;ASCII码转换成数字,dec ax,shl ax,1,;乘以2,mov bx,ax,jmp tablebx,;段内存储器间接转移:IPTABLEBX,disp1:mov dx,offset msg1,;分支程序1,jmp start2,例题5-10利用地址表实现多分支程序-5,jmp tablebx,;IPTABLEBX,;地址寻址方式:存储器间接转移,;数据寻址方式:,寄存器相对寻址,mov ax,offset table,add bx,ax,jmp word ptrbx,;IPBX,;数据寻址方式:,寄存器间接寻址,mov ax,bx,jmp ax,;IPAX,;数据寻址方式:,寄存器寻址,
    展开阅读全文

    开通VIP折扣优惠下载文档

    提示  咨信网声明:本文档由用户上传并分享,仅供学习交流、研究之用,未经授权,严禁复制、发行、汇编、翻译或网络传播等,侵权必究。

    咨信网小贴示:
    1、浏览或下载可查看了解,请点击【咨信网告知】。
    2、下载文件中如有侵权或不适当内容,将立即纠正。
    3、如果因为网速或其他原因下载失败请重新下载,重复下载[60天内]不扣币。
    4、开具发票登录电脑端申请,请点击【索取发票】。

    咨信网客服组:【微信客服】

    自信AI创作助手
    关于本文
    本文标题:第讲第章控制转移和程序结构.ppt
    链接地址:https://www.zixin.com.cn/doc/14732540.html

    Copyright ©2010-2026   All Rights Reserved  宁波自信网络信息技术有限公司 版权所有   |  客服电话:0574-28810668    微信客服:咨信网客服    投诉电话:18658249818   

    违法和不良信息举报邮箱:help@zixin.com.cn    文档合作和网站合作邮箱:fuwu@zixin.com.cn    意见反馈和侵权处理邮箱:1219186828@qq.com   | 证照中心

    12321jubao.png12321网络举报中心 电话:010-12321  jubao.png中国互联网举报中心 电话:12377   gongan.png浙公网安备33021202000488号  icp.png浙ICP备2021020529号-1 浙B2-20240490   


    关注我们 :微信公众号  抖音  微博  LOFTER               

    自信网络  |  ZixinNetwork