例43判断有无实根-2/2 cmp bx,ax;比较二者大小 Jge yes;条件满足? mov tag, O 第一分支体:条件不满足,tag←0 jmp done;跳过第二个分支体 yes: mov tag, 1 第二分支体:条件满足,tag←1 done:, exit O
例4.3 判断有无实根-2/2 cmp bx,ax ;比较二者大小 jge yes ;条件满足? mov tag,0 ;第一分支体:条件不满足,tag←0 jmp done ;跳过第二个分支体 yes: mov tag,1 ;第二分支体:条件满足,tag←1 done: .exit 0
例题单分支和双分支 寄存器AL中是字母Y或y,在令AH=0;否则 令AH=-1 cmp al,Y;AL是大写Y否? Jz next;是,转移 cmpa1,y′;AL是小写y否? Jz next;是,转移 mov ah,-1;不是Y或y,在AH=-1,结東 jmp done;一定要跳过另一个分支体 next: mov ah,0;是Y或y,在AH=0,结束 done
;寄存器AL中是字母Y或y,在令AH=0;否则 令AH=-1 cmp al,’Y’ ;AL是大写Y否? jz next ;是,转移 cmp al,’y’ ;AL是小写y否? jz next ;是,转移 mov ah,-1 ;不是Y或y,在AH=-1,结束 jmp done ;一定要跳过另一个分支体 next: mov ah,0 ;是Y或y,在AH=0,结束 done: ... 例题 单分支和双分支
第4 多分支程序设计 图示 >多个条件对应各自的分支语句体,哪个条 件成立就转入相应分支体执行。多分支可以 化解为双分支或单分支结构的组合,例如: or ah, ah ;等效于 cmp ah,0 jz function0;ah=0,转向 function0 dec ah 等效于 cmp ah,1 jz function1;ah=1,转向 function1 dec ah 等效于 cmp ah,2 jz function2;ah=2,转向 function2
多分支程序设计 ➢多个条件对应各自的分支语句体,哪个条 件成立就转入相应分支体执行。多分支可以 化解为双分支或单分支结构的组合,例如: or ah,ah ;等效于cmp ah,0 jz function0 ;ah=0,转向function0 dec ah ;等效于cmp ah,1 jz function1 ;ah=1,转向function1 dec ah ;等效于cmp ah,2 jz function2 ;ah=2,转向function2 第4章 图示
地址表形成多分支 需要在数据段事先安排一个按顺序排 列的转移地址表 >输入的数字作为偏移量。因为只有2个 字节16位偏移地址,所以偏移量需要 乘2 >关键是要理解间接寻址方式JMP指令 Table db displ, disp2, disp3, disp, 地址表分支1地址分支2地址
地址表形成多分支 ➢需要在数据段事先安排一个按顺序排 列的转移地址表 ➢输入的数字作为偏移量。因为只有2个 字节16位偏移地址,所以偏移量需要 乘2 ➢关键是要理解间接寻址方式JMP指令 地址表 分支1地址 分支2地址 ... Table db disp1, disp2, disp3, disp4,
例4.4数据段-1/ data msg db, Input number(1 8): ' Odh, Oah, 'S msg1 db Chapter 1:..., Odh, Oah, msg2db’ Chapter2:’,odh,Oah,’$ msg& db Chapter 8 ,0dh,Oah,’$ table dw(displ, disp2, disp3, disp dw disp, disp, disp, disp 取得各个标号的偏移地址 此处等同于 offset disp1
.data msg db 'Input number(1~8):',0dh,0ah,'$' msg1 db 'Chapter 1 : ...',0dh,0ah,'$' msg2 db 'Chapter 2 : ...',0dh,0ah,'$‘ ... msg8 db 'Chapter 8 : ... ',0dh,0ah,'$' table dw disp1,disp2,disp3,disp4 dw disp5,disp6,disp7,disp8 ;取得各个标号的偏移地址 例4.4 数据段-1/3 此处等同于 offset disp1