选择结构程序设计最新课件

上传人:磨石 文档编号:243001895 上传时间:2024-09-13 格式:PPT 页数:21 大小:196.50KB
返回 下载 相关 举报
选择结构程序设计最新课件_第1页
第1页 / 共21页
选择结构程序设计最新课件_第2页
第2页 / 共21页
选择结构程序设计最新课件_第3页
第3页 / 共21页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第六讲 选择结构程序设计,6.1,分支程序设计的两种结构形式,判定条件,分支,1,分支,2,判定条件,分支,1,分支,2,分支,n,Y,N,(1),(2),相当于,C,语言的,if,、,else,相当于,C,语言的,switch(),6.2 与分支程序有关的指令,1.,无条件转移指令,JMP,1),段内直接短转移,格式,:JMP SHORT OPR,执行的操作,:(IP)-(IP)+8,位位移量,2),段内直接近转移,格式,:JMP NEAR PTR OPR,执行的操作,:(IP)-(IP)+16,位位移量,1.无条件转移指令JMP,3),段内间接转移,格式,:JMP WORD PTR OPR,执行的操作,:(IP)-(EA),4),段间直接,(,远,),转移,格式,:JMP FAR PTR OPR,执行的操作,:(IP)-OPR,的段内偏移地址,(CS)-OPR,所在段的段地址,5),段间间接转移,格式,:JMP DWORD PTR OPR,执行的操作,:(IP)-(EA) (CS)-(EA+2),2.条件转移指令,1),根据单个条件标志的设置情况转移,JZ(,或,JE)(Jump if zero,or equal),结果为零,(,或相等,),则转移,格式,:JE(,或,JZ) OPR,测试条件,:ZF=1,JNZ(,或,JNE)(Jump if not zero,or not equal),结果不为零,(,或不相等,),则转移,格式,:JNZ(,或,JNE) OPR,测试条件,:ZF=0,1)根据单个条件标志的设置情况转移,J,S(Jump if sign) 结果为负则转移,格式: JS OPR,测试条件:SF=1,JNS(Jump if not sign)结果为正则转移,格式:JNS OPR,测试条件:SF=0,1)根据单个条件标志的设置情况转移,JO(Jump if overflow),溢出则转移,格式,: JO OPR,测试条件,:OF=1,JNO(Jump if not overflow),不溢出则转移,格式,: JNO OPR,测试条件,:OF=0,1)根据单个条件标志的设置情况转移,JP(,或,JPE)(Jump if parity,or parity even),奇偶位为,1,则转移,格式,: JP OPR,测试条件,:PF=1,JNP(,或,JPO)(Jump if not parity,or parity odd),奇偶位为,0,则转移,格式,: JNP(,或,JPO) OPR,测试条件,:PF=0,2)比较两个无符号数,并根据比较的结果转移,JB(,或,JNAE,JC) OPR,低于,或者不高于或等于,或进位位为,1,则转移,JNB(,或,JAE,JNC),不低于,或者高于或等于,或进位位为,0,则转移,JBE(,或,JNA)(Jump if below or equal,or not above),低于或等于,或不高于则转移,JNBE(,或,JA)(Jump if not below or equal,or above),不低于或等于,或者高于则转移,3)比较两个带符号数,并根据比较的结果转移,JL(或,J,NGE)(Jump if less,or not greater or equal) 小于,或者不大于或者等于则转移,JNL(或JGE)(Jump if not less,or greater or equal)不小于,或者大于或者等于则转移,JLE(或JNG)(Jump if less or equal,or not greater) 小于或等于,或者不大于则转移,JNLE(或JG)(Jump if not less or equal,or greater) 不小于或等于,或者大于则转移,4)测试CX的值为0则转移指令,JCXZ(Jump if CX register is zero) CX寄存器的内容为零则转移,格式:JCXZ OPR,测试条件:(CX)=0,分析下列程序段,ADD AX,BX,JNO L1,JNC L2,SUB AX,BX,JNC L3,JMP SHORT L5,如果,AX,和,BX,的内容给定如下:,AX BX,1.147B 80DC,2.B568 54B7,3.42C8 608D,4.D023 9FD0,5.94B7 B568,问该程序执行完后,程序转向哪里?,6.2 分支程序设计举例,code segment,assume cs:code,input:,mov ah,01h,int 21h,cmp al,20h,jz exit,cmp al,61h,jl input,cmp al,7bh,jge input,例,1,编写一个汇编语言程序,对键盘输入的小写字母用大写字母显示出来,sub al,20h,mov dl,al,mov ah,02h,int 21h,jmp input,exit:,mov ah,4ch,int 21h,code ends,end,例,2,编写程序,从键盘接收一个小写字母,然后找出他的前导字母和后续字母,再按顺序显示这三个字符。,code segment,assume cs:code,input:,mov ah,07h,int 21h,cmp al,20h,je exit,cmp al,61h,jl input,cmp al,7ah,jg input,print: sub al,01h,mov dl,al,mov ah,02h,int 21h,add al,01h,mov dl,al,mov ah,02h,int 21h,add al,01h,mov dl,al,mov ah,02h,int 21h,jmp input,exit: mov ah,4ch,int 21h,code ends,end,例,3,将,AX,寄存器中的,16,位数分成,4,组,每组,4,位,然后把这四组数分别放在,AL,BL,CL,和,DL,中,Data segment,X db 4 dup(?),Data ends,Code segment,assume cs:code,ds:data,start:push ds,sub ax,ax,push ax,mov ax,data,mov ds,ax,mov ax,1234h,mov cl,04h,mov ch,4,mov si,0,mov di,0,repeat: rol ax,cl,mov bl,al,and bl,0fh,mov xsi,bl,inc si,dec ch,jnz repeat,mov al,x,mov bl,x1,mov cl,x2,mov dl,x3,ret,code ends,end start,例,4,已知三个数在数据区中存放,将它们按照从大到小的顺序排列出来,dat segment,a db 1,5,3,dat ends,cod segment,assume cs:cod,ds:dat,start:,mov ax,dat,mov ds,ax,mov ah,2,mov dl,a,or dl,30h,int 21h,mov dl,a+1,or dl,30h,int 21h,mov dl,a+2,or dl,30h,int 21h,mov dl,0ah,int 21h,mov dl,0dh,int 21h,mov al,a,cmp al,a+1,ja l1,mov ah,a+1,mov a,ah,mov a+1,al,l1: mov al,a,cmp al,a+2,ja l2,mov ah,a+2,mov a,ah,mov a+2,al,l2: mov al,a+1,cmp al,a+2,ja l3,mov ah,a+2,mov a+2,al,mov a+1,ah,l3: mov ah,2,mov dl,a,or dl,30h,int 21h,mov dl,a+1,or dl,30h,int 21h,mov dl,a+2,or dl,30h,int 21h,mov ah,4ch,int 21h,cod ends,end start,例,5,比较数组,BUF,中的三个,16,位补码,若三个数都不相等则显示,0,,有两个相等则显示,1,,都相等则显示,2,。,假定三个数为,a,、,b,、,c,,,D,为比较结果,STACKSEGMENTSTACK,DB 200 DUP(0),STACKENDS,DATASEGMENT,BUFDW a, b, c,DATAENDS,CODESEGMENT,ASSUME CS: CODE, DS: DATA, SS: STACK,BEGIN:MOV AX, DATA,MOV DS, AX,MOV DL, 0,MOV AX, BUF; aAX,CMP AX;BUF+2; a=b?,JNZ L1,INC DL,L1,:,MOV BX; BUF+2; bBX,CMP BX, BUF+4; b=c?,JZ L2; b=c,转,L2,CMP AX, BUF+4,JNZ L3; ac,转,L3,L2,:,INC DL,L3,:,ADD DL, 30H;(DL),变为,ASCII,码,MOV AH, 2,INT 21H,MOV AH, 4CH,INT 21H,CODEENDS,END BEGIN,L3,L2,L1,N,Y,Y,N,Y,N,D = 0,a=b?,D+1,D,b=c?,a=c?,D+1,D,显示,D,开始,结束,例,6,设,A,、,B,、,C,三个单元存放着三个数,若三个数都不为,0,,则求三数之和放在,D,单元内,若其中有一个为,0,,则将另外两个也清,0,。,此题为判断,A,、,B,、,C,三个数是否为,0,的分支程序。存贮单元的分配,题目已告诉,变量名分别为,A,、,B,、,C,、,D,,都为字变量,。,STACKSEGMENTSTACK,DB 200 DUP(0),STACKENDS,DATASEGMENT,ADW a,BDW b,CDW c,DDW ?,DATAENDS,CODESEGMENT,ASSUME CS: CODE, DS: DATA, SS: STACK,BEGIN:MOV AX, DATA,MOV DS, AX,CMP A, 0,JZ L1,CMP B, 0,JZ L1,CMP C, 0,JZ L1,MOV AX, A,ADD AX, B,ADD AX, C,MOV D, AX,EXIT:MOV AH, 4CH,INT 21H,L1,:,MOV A, 0,MOV B, 0,MOV C, 0,JMP EXIT,CODEENDS,END BEGIN,N,Y,Y,N,Y,N,a=0?,b=0?,c=0?,a+b+c,D,a,、,b,、,c,清,0,开始,结束,例,7,从键盘上键入,0,至,9,中的任一自然数,x,,求其立方值。若输入的字符不是,0,至,9,中的数字,则显示错误信息,并要求重新输入。,Data segment,Input db please input x(09):$,Tab dw 0,1,8,27,64,125,216,343,512,729,X db ?,Xxx dw ?,Inerr db 0ah,0dh,input error! Try again.,0ah,0dh,$,Data ends,Stack segment,Db 200 dup(0),Stack ends,Code segment,Assume cs:code,ds:data,ss:stack,Begin:mov ax,data,Mov ds,ax,Next:mov dx,offset input,Mov ah,9,Int 21h,Cmp al,0,Jb err,Cmp al,9,Ja err,And al,0fh,Mov x,al,Xor bx,Mov bl,al,Sal bx,1,Mov ax,tabbx,Mov xxx,ax,Exit:mov ah,4ch,Int 21h,Err:mov dx,offset inerr,Mov ah,9,Int 21h,Jmp next,Code ends,End begin,练习,试编写一汇编语言程序,要求从键盘接收一个四位的十六进制数,并在终端上显示与它等值的二进制数,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 方案规范


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!