基本汇编语言程席设计 2双分支程序 两个分支都有语句 体,如何选择条件不重 条件成立? 要 N 流程图中分支体的 份分支语句体1 位置就是程序的实际顺 序,故分支语句体1最 后一定要有一条JMP 分支语句体2 指令,跳过语句体2, 转移到“后续操作”。 后续操作 JMP
第 四 章 基 本 汇 编 语 言 程 序 设 计 11 双分支 2.双分支程序 两个分支都有语句 体,如何选择条件不重 要。 流程图中分支体的 位置就是程序的实际顺 序,故分支语句体1最 后一定要有一条JMP 指令,跳过语句体2, 转移到“后续操作” 。 条件成立? 分支语句体2 Y N 分支语句体1 后 续 操 作 JMP
基本汇编语言程席设计 双分支举例:显示BX的最高位。 shi bx. 1 mov d1.0% Jc one ;转分支体 moy dl,”0 ;分支体 shi bx, 1 jmp next ;转后续操作 Jnc next 0ne: moy dl,’1 ;分支体2 moy dl,’1 next: moy ah. 2 后续操作 int 21h next. mov ah. 2 int 21h 3.分支程序的其他问题 (1)有些双分支问题可以先假设一种情况,把双分 支改成单分支问题。如上例,先假设B最高位为0, 在分支外准备显示0;如最高位为0,即可直接跳到后 续操作;如最高位为1才需要执行分支体。(23)
第 四 章 基 本 汇 编 语 言 程 序 设 计 12 双分支 双分支举例:显示BX的最高位。 shl bx,1 jc one ;转分支体 mov dl,’0’ ;分支体1 jmp next ;转后续操作 One: mov dl,’1’ ;分支体2 next: mov ah,2 ;后续操作 int 21h 3.分支程序的其他问题 ⑴有些双分支问题可以先假设一种情况,把双分 支改成单分支问题。如上例,先假设BX最高位为0, 在分支外准备显示0;如最高位为0,即可直接跳到后 续操作;如最高位为1才需要执行分支体。⑵⑶ mov dl,’0’ shl bx,1 jnc next mov dl,’1’ next:mov ah,2 int 21h
基本汇编语言程序设计 (2)分支的嵌套形成多分支,嵌套形式多种多样。 例1:求符号函数 当X>0 Y当X=0 当Ⅹ<0 X≥0? X=0? Y=-1 N Y=1 Y=0 实际是双分支的组合
第 四 章 基 本 汇 编 语 言 程 序 设 计 13 多分支 ⑵分支的嵌套形成多分支,嵌套形式多种多样。 例1:求符号函数 1 当 X>0 Y= 0 当 X=0 -1 当 X<0 X≥0? Y N X=0? Y N Y=-1 Y=1 Y=0 实际是双分支的组合
基本汇编语言程序设计 例2:判断AL各位的值,D0=1,转移到L0;D1=1,转移 到L1;D2=1,转移到L2 DO=1 也可认为是双分 支的组合,但为简 分支L0 化编程,实现左图 的分支结构可以在 D1=1 数据段设置转移地 份分支L1 址表,如例题44 D2=1 分支L2
第 四 章 基 本 汇 编 语 言 程 序 设 计 14 多分支 例2:判断AL各位的值,D0=1,转移到L0;D1=1,转移 到L1;D2=1,转移到L2…… D0=1 分支L0 D2=1 D1=1 分支L1 分支L2 y y y N N N 也可认为是双分 支的组合,但为简 化编程,实现左图 的分支结构可以在 数据段设置转移地 址表,如例题4.4
基本汇编语言程席设计 例4.4使用地址表实 相对 tabel 现多分支。8个分支的标 的偏移量 号分别为disp1,disp2 isp 在代码段有 disp disp1: moy dx,… disp disp di sp2: mov I disp 设disp1的偏移地址为 disp3 230h,disp2的偏移地址 2500H 为2500h tabel 2300H 在数据段有: ECA86420d tabe dw sp displ, di sp2
第 四 章 基 本 汇 编 语 言 程 序 设 计 15 多分支 例4.4 使用地址表实 现多分支。8个分支的标 号分别为disp1,disp2… 在代码段有: disp1:mov dx,… disp2:mov … 设disp1的偏移地址为 2300h,disp2的偏移地址 为2500h……。 在数据段有: tabel dw disp1,disp2,… tabel disp1 ︰ ︰ disp4 disp3 2500H 2300H disp5 disp6 disp7 disp8 0 2 4 6 8 A C E 相对tabel 的偏移量