桂林电子科技大学微机原理

上传人:san****019 文档编号:15800555 上传时间:2020-09-07 格式:PPT 页数:48 大小:410.10KB
返回 下载 相关 举报
桂林电子科技大学微机原理_第1页
第1页 / 共48页
桂林电子科技大学微机原理_第2页
第2页 / 共48页
桂林电子科技大学微机原理_第3页
第3页 / 共48页
点击查看更多>>
资源描述
3.7 分支程序的设计,分支程序就是根据条件的不同完成不同功能的程序。 编写分支程序要用到条件转移指令。 执行转移/调用指令时,8086指令队列寄存器原内容(按顺序取出的后续指令)被清除,转向指令的地址(目标地址OPR) CS、IP。CPU按CS、IP的指示,跳转到目标地址去执行。,3.7.1 无条件转移指令 使程序无条件跳转到目标地址(OPR)去执行。 一. 段内转移 转移指令和待转向指令在同一代码段中,只 改变IP的内容。 1.段内直接转移 格式:JMP OPR; OPR 待转向指令标号 操作:IP 标号偏移地址,说明: 标号偏移地址 JMP指令的下一条指令的偏移地址位移量 位移量由汇编程序在汇编过程中,根据标号 地址与JMP指令所在地址进行计算得到。,例: : JMP SHORT NEXT; : NEXT:MOV AL,05H; :,由计算机根据转移的相对位置计算得到。,转移范围 短转移(位移量为8位) 以JMP为中心的256 个单元; 近转移(位移量为16位) 以JMP为中心的 64KB个单元。 短转移和近转移也可以分别表示为 JMP SHORT OPR JMP NEAR PTR OPR,例: : JMP NEAR PTR NEXT; : NEXT:MOV AL,05H;,由计算机根据转移的相对位置计算得到。,2. 段内间接转移 格式:JMP OPR; OPR R,M 操作:IP (EA) 说明: 有效地址EA由OPR的寻址方式确定; 转移范围为以JMP为中心的64KB。,例: BUF DW 0301H MOV BX, 2C8FH JMP BUF JMP NEXT JMP BX JMP WORD PTR BX NEXT: ADD AX, BX ,; IP NEXT偏移地址,; IP 2C8FH,;IP 0301H,; IP (2C8FH,2C90H),二. 段间转移 转移指令和待转向指令不在同一代码段中,同 时改变CS、IP。 转移范围:1MB。 1. 段间直接转移 指令中直接给出不在本代码段中待转向指令标号。 格式:JMP FAR PTR OPR ; OPR 待转向指令的标号 操作:CS标号段地址,IP 标号偏移地址。,例3.20 在C1代码段有一条转移到C2代码段的无条件转移指令,如下如示: C1 SEGMENT JMP FAR PTR NEXT C1 ENDS C2 SEGMENT NEXT:MOV CL,AL C2 ENDS,2.段间间接转移 待转向指令的段地址、段内偏移地址放在连续 的4个内存单元中(指令中给出访问内存单元的寻址 方式同操作数的寻址方式)。 格式:JMP DWORD PTR OPR ; OPR M 操作:IP (EA), CS (EA2),例3.21 JMP DWORD PTR BPDI 设SS=5000H,BP=1000H,DI=0050H,存放转向地址的堆栈段中的存储单元物理地址: PA=50000H+1000H+0050H=51050H 此时转向地址的存储情况如图3.6所示,JMP指令位于C1代码段,转移到C2代码段,程序形式如下:,C1 SEGMENT 1000H:1300H JMP DWORD PTR BPDI C1 ENDS C2 SEGMENT 2000H:2500H MOV DL,AL C2 ENDS,存储单元的内容,3.7.2 条件转移指令,根据标志位来判断测试条件:满足条件则转移到指令指定地址执行(分支);否则顺序执行下一条指令。,格式:JXX OPR; OPR标号,操作:当条件XX满足时则转移到OPR执行,否则顺序执行。,注意: 属于段内直接短转移指令,转移范围为256字节(IP128IP+127)。,JS OPR ;结果为负转移 JNS OPR ;结果为正转移,JPJPE OPR ;结果中“1”的个数为偶转移 JNPJPO OPR ;结果中“1”的个数为奇转移,JO OPR ;结果有溢出转移 JNO OPR ;结果无溢出转移,JC OPR ;结果有进位转移 JNC OPR ;结果无进位转移,JZJEOPR ;结果为零相等转移 JNZJNE OPR ;结果不为零不相等转移,(1) 单条件转移指令,JB JNAE OPR ;小于不大于等于(CF=1)转移,JNB JAE OPR ;不小于大于等于(CF=0)转移,JBE JNA OPR ;小于等于不大于(CFZF=1)转移,JNBE JA OPR ;不小于等于大于(CFZF=0)转移,B:Below小于(低于) A:Above大于(高于) E:Equal等于,(2) 适合无符号数比较的条件转移指令,L:Less小于 G:Greater大于 E:Equal等于,JNL JGE OPR ;不小于大于等于转移,JLE JNG OPR ;小于等于不大于转移,JNLE JG OPR ;不小于等于大于转移,(3)适合带符号数比较的条件转移指令,JL JNGE OPR ;小于不大于等于转移,SFOF=1,SFOF=0,(SFOF) ZF)=1,(SFOF) ZF)=0,注意:上述条件转移指令通常是与算术、逻辑、移位等指令联用的。且注意有符号和无符号的区别。 如: 若AL的内容是一个无符号数,那么 CMP AL, 0 ; JA NEXT ; 即当AL0时转移 若AL的内容是一个有符号数,那么 CMP AL, 0 ; JG DONE ;即当AL0时转移,3.7.3 分支程序的结构,分为:单分支结构和多分支结构两种,3.7.4 分支程序设计举例,例:比较两个无符号数的大小,将大数存入MAX单元。,例3.23 检查NN单元的数据是否为1位16进制数,是则将其转换为ASCII码,否则置为0FFH。,ALN,AL0?,AL=AL+30H,S,存AL值,END,N,Y,AL=AL+07H,AL9?,AL15?,AL=0FFH,Y,N,N,Y,程序如下: ASTACK SEGMENT STACK DW 256 DUP(?) TOP LABEL WORD ASTACK ENDS DATA SEGMENT NN DB ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA;SS:ASTACK START: MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX,MOV SP,OFFSET TOP MOV AL,NN ;AL N CMP AL,9 ;AL和9比较 JBE ALOOP1 ;AL 9,转ALOOP1 CMP AL,15 ;AL和15比较 JA ALOOP2 ;AL15,转ALOOP2 ADD AL,07H ;AL AL+07H ALOOP1: ADD AL,30H ;AL AL+30H DONE: MOV AH,4CH ;返回DOS INT 21H ALOOP2: MOV AL,0FFH ;AL 0FFH JMP DONE CODE: ENDS END START,例3.22 符号函数,1 (x0) y = 0 (x=0) 1 (x0),ASTACKSEGMENTSTACK DW 256 DUP(?) TOPLABEL WORD ASTACKENDS DATA SEGMENT XXDB X YYDB ? DATA ENDS,CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:ASTACK START: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX LEASP,TOP MOVAL,XX;ALX CMPAL,0;X与0比较 JGENEPA;X0,转NEPA MOVYY,0FFH;X0,YY 1 JMPSTOP,能否缺省?为什么?,NEPA:JE NEPB ;X=0,转NEPB MOVYY,1;X0,YY1 JMPSTOP NEPB:MOVYY,0;X=0,YY0 STOP:MOVAH,4CH;返回DOS INT21H CODE ENDS ENDSTART,例3.24从键盘接受一个字符送入AL, 根据AL的数值进行跳转,设由键盘输入 09中的任一个到AL,则AL的内容就为09中的任一个字符的ASCII值。然后根据ASCII值转到L0、L1、L9程序段中。,STACKSEGMENTSTACK DW 256 DUP(?) TOP LABEL WORD STACK ENDS DATASEGMENT TAB DW L0,L1,L2,L3,L4,L5,L6,L7, L8,L9 DATAENDS,CODESEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOVAX,DATA MOVDS,AX MOVAX,STACK MOVSS,AX MOVSP,OFFSET TOP,MOV AH,01H;键入字符 INT 21H CMP AL,30H;AL和30H比较 JB DONE;AL30H,转DONE CMP AL,39H;AL和39H比较 JA DONE;AL39H,转DONE SUB AL,30H SHL AL,1;AX2*i MOV AH,0,LEA BX,TAB;BXTAB偏移地址 ADD BX,AX ;BXTAB+2*i JMP WORD PTR BX;转(TAB+2*i)=Li处执行 DONE: MOV AH,4CH;返回DOS INT21H L0: ;分支L0 JMPDONE L1: ;分支L1 JMPDONE L9: ;分支L9 JMPDONE CODE ENDS END START,多分支结构的实现形式之一,end,DATASEGMENT TAB DW L0,L1,L2,L3,L4,L5,L6,L7,L8,L9 DATAENDS,L0: ;分支L0 JMPDONE L1: ;分支L1 JMPDONE L9: ;分支L9 JMPDONE,多分支结构的实现形式之一,(1) 段内直接转移指令,格式:JMP SHORT OPRD;OPRD标号,功能:将程序无条件地转移到标号OPRD为起点的程序段执行。,操作:IPIP+D8;D8为8位偏移量的补码,转移范围:IP-128IP+127(256字节),3.7.1 无条件转移指令, 段内直接短转移指令,说明:转移指令可以从现行指令地址(IP)向低地址转移D8为负数;也可以向高地址转移D8为正数。,注意:JMP SHORT PTR CCC;错误指令,格式:JMP NEAR PTR OPRD; 其中,OPRD标号,功能:将程序无条件地转移到标号OPRD为起点的程序段执行。,操作:IPIP+D16;D16为16位偏移量的补码,转移范围:IP-32768IP+32767(64K一个段), 段内直接近转移指令,说明:直接转移指令中的目标地址OPRD直接使用要转向指令的标号,属性操作符NEAR PTR在指令中可省略,直接写成 :,其中, 标号的偏移地址当前转移指令的下一条指令的偏移地址位移量 位移量是是16位的,可以由汇编程序在汇编过程中,根据标号地址与JMP指令所在地址进行计算得到。,JMP 标号 ; IP标号的偏移地址,格式:JMP OPRD; OPRDR,M,操作:IPEA;EA为OPRD确定的有效地址。,例如:JMP BX; (IP)(BX)或BX,说明:有效地址EA由OPRD的寻址方式确定。若是寄存器寻址,则寄存器内存放的就是EA;若是MEM寻址,那么EA就是寻址单元的内容。,(2) 段内间接转移指令,例3.19 JMP WORD PTR BX+20H 设DS=3000H,BX=1000H,则存放转移有效地址的字单元的物理地址: PA=30000H+1000H+20H=31020H 若指令执行前,CS=0100H,IP=2110H,(31020H)=C6H,(31021H)=40H,则指令执行后,IP=40C6H,CS值不变。 因此,程序就转移到0100H:40C6H处继续执行,如下所示,CS : IP 0100H:2110H JMP WORD PTRBX+20H 0100H:40C6H ADD AX,DX,31020H,格式:JMP FAR PTR OPRD;OPRD标号 功能:程序转移到OPRD所指的指令处执行。,操作:IP OPRD的偏移地址; CSOPRD的段地址,转移范围:1MB 段间转移,(3) 段间直接转移指令,格式:JMP DWORD PTR OPRD; OPRDM,操作:IP (EA); CS(EA+2)。,转移范围:1MB段间转移,(4) 段间间接转移指令,执行:JMP VAR1;IP1000H,执行:JMP VAR2;IP5678H CS1234H,例如:DATA SEGMENT; VAR1 DW 1000H; VAR2 DD 12345678H DATA ENDS,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


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

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


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