资源描述:
《分支程序设计_0》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、分支程序设计 这种程序的思路是先判断条件是否成立;若成立,转到转移指令指定的位置执行 例:从接口03F0H中取数,若此数>=90,则将00H送03F7H,若此数 MOVDX,03F0H INAL,DX CMPAL,90 JNCNEXT1 MOVAL,0FFH JMPNEXT2 NEXT1: MOVAL,00H NEXT2: MOVDX,03F7H OUTDX,AL HLT 分支程序根据条件是真或假决定执行与否 判断的条件是各种指令,如C
2、MP、TEST等执行后形成的状态标志 转移指令Jcc和JMP可以实现分支控制;还可以采用MASM6.x提供的条件控伪指令实现 单分支程序设计 条件成立跳转,否则顺序执行分支语句体;注意选择正确的条件转移指令和转移目标地址 cmpax,0 jnsnonneg ;分支条件:AX≥0 negax ;条件不满足,求补 nonneg:movresult,ax ;条件满足 例:计算AX的绝对值 双分支程序设计 条件成立跳转执行第2个分支语句体,否则顺序执行第1个分支语句体。注意第1个分支体后一定要
3、有一个JMP指令跳到第2个分支体后 例:显示BX最高位 shlbx,1;BX最高位移入CF jcone ;CF=1,即最高位为1,转移 movdl,’0’ ;CF=0,即最高位为0,DL←’0‘ jmptwo;一定要跳过另一个分支体 one:movdl,‘1‘;DL←’1‘ two:movah,2 int21h;显示 movdl,‘0‘;DL←’0‘ shlbx,1;BX最高位移入CF jnctwo ;CF=0,最高位为0,转移 movdl,’1’ ;CF=1,最高位为1,DL←
4、’1‘ two:movah,2 int21h;显示 例:显示BX最高位 多分支程序设计 多个条件对应各自的分支语句体,哪个条件成立就转入相应分支体执行。多分支可以化解为双分支或单分支结构的组合例如: orah,ah;等效于cmpah,0 jzfunction0;ah=0,转向function0 decah;等效于cmpah,1 jzfunction1;ah=1,转向function1 decah;等效于cmpah,2 jzfunction2;ah=2,转向function2 AH=0
5、fuction0 Y N AH=1 fuction1 Y N AH=2 fuction2 Y N 地址表形成多分支 需要在数据段事先安排一个按顺序排列的转移地址表,输入的数字作为偏移量。因为只有2个字节16位偏移地址,所以偏移量需要乘2 关键是要理解间接寻址方式JMP指令 .data msgdb‘Inputnumber(1~8):’,0dh,0ah,’$’ msg1db‘Chapter1:...’,0dh,0ah,’$’ msg2db‘Chapter2:...’,0dh,0ah
6、,’$‘ ... msg8db‘Chapter8:...‘,0dh,0ah,’$’ tabledwdisp1,disp2,disp3,disp4 dwdisp5,disp6,disp7,disp8 ;取得各个标号的偏移地址 例:数据段 start1:movdx,offsetmsg;提示输入数字 movah,9 int21h movah,1;等待按键 int21h cmpal,’1’;数字8? jastart1 andax,000fh;将ASCII码转换成数字 decax shla
7、x,1;等效于addax,ax movbx,ax jmptable[bx] ;(段内)间接转移:IP←[table+bx] start2:movah,9 int21h .exit0 disp1:movdx,offsetmsg1;处理程序1 jmpstart2 ..