《最新微机原理第04章3顺序分支循环结构06PPT课件》由会员分享,可在线阅读,更多相关《最新微机原理第04章3顺序分支循环结构06PPT课件(35页珍藏版)》请在金锄头文库上搜索。
1、微机原理第微机原理第04章章3顺序分支顺序分支循环结构循环结构06主要内容:主要内容:u汇编语言源程序的结构汇编语言源程序的结构u汇编语言语句格式汇编语言语句格式u伪指令伪指令u功能调用功能调用u汇编语言程序设计汇编语言程序设计第第4章:例章:例4.4 代码段(续)代码段(续)mov dl,al;入口参数:;入口参数:DLALmov ah,2;02号号DOS功能调用功能调用int 21h;显示一个;显示一个ASCII码字符码字符mov al,hex+1 ;转换并显示下一个数据;转换并显示下一个数据and al,0fhxlatmov dl,almov ah,2int 21hXLAT第第4章:章:
2、4.4 分支程序设计分支程序设计u分支程序根据条件是真或假决定执行与否分支程序根据条件是真或假决定执行与否u判断的条件是各种指令,如判断的条件是各种指令,如CMP、TEST等执行后形成的状态标志等执行后形成的状态标志u转移指令转移指令Jcc和和JMP可以实现分支控制可以实现分支控制u分支结构有分支结构有n单分支结构单分支结构n双分支结构双分支结构n多分支结构多分支结构第第4章:单分支结构章:单分支结构 u条件成立跳转,否条件成立跳转,否则顺序执行分支语则顺序执行分支语句体句体u注意选择正确的条注意选择正确的条件转移指令和转移件转移指令和转移目标地址目标地址实例:求绝对值实例:求绝对值第第4章:
3、计算章:计算AX中有符号数的绝对值中有符号数的绝对值 cmp ax,0 cmp ax,0 jge nonneg jge nonneg;条件满足(;条件满足(AX0AX0),转移),转移 neg ax neg ax ;条件不满足,求补;条件不满足,求补nonneg:nonneg:mov result,axmov result,ax;条件满足;条件满足 ;不恰当的分支;不恰当的分支 cmp ax,0cmp ax,0 jl yesneg jl yesneg;条件满足(;条件满足(AXAX0 0),转移),转移 jmp nonnegjmp nonnegyesneg:yesneg: neg axneg
4、ax;条件不满足,求补;条件不满足,求补nonneg:nonneg: mov result,axmov result,ax ;条件满足;条件满足第第4章:双分支结构章:双分支结构 条件成立跳转执条件成立跳转执行第行第2个分支语句体,个分支语句体,否则顺序执行第否则顺序执行第1个个分支语句体分支语句体 注意第注意第1个分支个分支体后一定要有一个体后一定要有一个JMP指令跳到第指令跳到第2个个分支体后分支体后实例:显示实例:显示BX的最高位的最高位第第4章:显示章:显示BX的的最高位最高位(双双)shl bx,1;BX最高位移入最高位移入CF标志标志jc one;CF1,即最高位为,即最高位为1,
5、转移转移mov dl,30h;CF0,即最高位为,即最高位为0:DL30H0jmp two;一定要跳过另一个分支体;一定要跳过另一个分支体one:mov dl,31h;DL 31H1two:mov ah,2int 21h;显示;显示可以用可以用JNC替换替换JC4章:显示章:显示BX的的最高位最高位(双)(双)shl bx,1;BX最高位移入最高位移入CF标志标志jnc one;CF0,即最高位为,即最高位为0,转移转移mov dl,31h;CF1,即最高位为,即最高位为1:DL31H1jmp two;一定要跳过另一个分支体;一定要跳过另一个分支体one:mov dl,30h;DL 30H0t
6、wo:mov ah,2int 21h;显示;显示4章:显示章:显示BX的的最高位最高位(单支)(单支)mov dl,0 ;DL30H0shl bx,1;BX最高位移入最高位移入CF标志标志jnc two;CF0,即最高位为,即最高位为0,转移转移mov dl,1;CF1,即最高位为,即最高位为1:DL31H1two:mov ah,2int 21h;显示;显示 编写分支程序,需留心分支的开始和结束编写分支程序,需留心分支的开始和结束4章:显示章:显示BX的的最高位最高位(无分支)(无分支)mov dl,0shl bx,1;BX最高位移入最高位移入CF标志标志adc dl,30h;CF0,DL03
7、0h030H0;CF1,DL030h131H1two:mov ah,2int 21h;显示;显示分支结构(多分支分支结构(多分支)u试编写程序段,实现符号函数。试编写程序段,实现符号函数。u 1 X0uY= 0 X=0u -1 X0程序程序uSTART:MOVAX,BUFFER ;(;(BUFFER)=XuORAX,AXuJzZERO ;X0,则转则转ZEROuJNSPLUS ;X为正数,则转为正数,则转PLUSuMOV BX,0FFFFH;X为负数,则为负数,则1送送BXuJMPCONT1uZERO:MOVBX,0uJMPCONT1uPLUS:MOV BX,1uCONT1:范例范例u现有若干
8、个程序段,现有若干个程序段,每一程序段的入口地每一程序段的入口地址分别是址分别是SUB1,SUB2,SUBn。u试编制一程序,根据试编制一程序,根据指定的参数转入相应指定的参数转入相应的程序段。(入口地的程序段。(入口地址构造的跳转表)址构造的跳转表)SUB1SUB2SUB3SUB4.SUBn例子例子uDATA SEGMENTu TABLE DW SUB1,SUB2,SUBnu PARAM DB 3uDATA ENDSuSTACK SEGMENT PARA STACKuDW 10 DUP(0)uSTACK ENDSuCOSEG SEGMENT PARA STACKuASSUME CS:COSE
9、G,DS:DATA,SS:STACKuBEING: MOV AX,DATAuMOV DS,AXuMOV AL,PARAMuMOV AH,0uDEC ALuSHL AL,1uMOV BX,OFFSET TABLEuADD BX,AXuJMP BXuSUB1: .u u JMP END0Mov bx,bxJmp bxuEND0: MOV AH,4CHuINT 21HuCOSEG ENDSuEND BEING跳转表由转移指令组成跳转表由转移指令组成uDATA SEGMENTuPARAM DB 3 uDATA ENDSuSTACK SEGMENT PARA STACKuDW 20H DUP(0) uS
10、TACK ENDSuCOSEG SEGMENTuASSUME CS:COSEG,DX:DATA,SS:STACKuBEING: MOV AX,DATA uMOV DS,AXuMOV BH,0uMOV BL,PARAMuDEC BL uMOV AL,BLuSHL BL,1uADD BL,ALuADD BX,OFFSET TABLEuJMP BXuTABLE: JMP SUB1u JMP SUB2uu JMP SUBnuSUB1: uuJMP END0uSUB2: uuJMP END0uSUBn: uuEND0: MOV AH,4CHuINT 21HuCOSEG ENDSuEND BEING第第4
11、章:章:4.5 循环程序设计循环程序设计u循环程序结构循环程序结构是满足一定条件的情况下,是满足一定条件的情况下,重复执行某段程序重复执行某段程序u循环结构的程序通常有循环结构的程序通常有3个部分:个部分:n 循环初始部分循环初始部分为开始循环准备必要的条为开始循环准备必要的条件,如循环次数、循环体需要的数值等件,如循环次数、循环体需要的数值等n 循环体部分循环体部分指重复执行的程序部分,其指重复执行的程序部分,其中包括对循环条件等的修改程序段中包括对循环条件等的修改程序段n循环控制部分循环控制部分判断循环条件是否成立,判断循环条件是否成立,决定是否继续循环决定是否继续循环第第4章:循环控制章
12、:循环控制u循环结构程序循环结构程序的设计关键是循环控制部的设计关键是循环控制部分分u循环控制可以在进入循环之前进行,也循环控制可以在进入循环之前进行,也可以在循环体后进行,于是形成两种结可以在循环体后进行,于是形成两种结构:构:n“先判断、后循环先判断、后循环”结构结构n“先循环、后判断先循环、后判断”结构结构u循环结束的控制可以用循环次数,还可循环结束的控制可以用循环次数,还可以用特定条件等,于是又有:以用特定条件等,于是又有:n计数控制循环计数控制循环n条件控制循环条件控制循环图示图示第第4章:先循环后判断的循环结构章:先循环后判断的循环结构 结束结束 初始化初始化 循环的初始状态循环的
13、初始状态 循环体循环体 循环的工作部分循环的工作部分及修改部分及修改部分 计数控制循环计数控制循环条件控制循环条件控制循环修改部分修改部分控制条件控制条件Y YN N第第4章:章:4.5.1 计数控制循环计数控制循环 u计数控制循环计数控制循环利用利用循环次数循环次数作作为控制条件为控制条件u易于采用循环指令易于采用循环指令LOOP和和JCXZ实现实现n初始化:将循环次数或最大循初始化:将循环次数或最大循环次数置入环次数置入CXn循环体循环体n循环控制:用循环控制:用LOOP指令对指令对CX减减1、并判断是否为、并判断是否为0第第4章:用二进制显示章:用二进制显示BL内容内容mov cx,8
14、;CX8(循环次数)(循环次数)again:shl bl,1;左移进;左移进CF,从高位开始显示从高位开始显示mov dl,0 ;MOV指令不改变指令不改变CFadc dl,30h;DL030HCF;CF若是若是0,则,则DL 0 ;CF若是若是1,则,则DL 1 mov ah,2int 21h;显示;显示loop again;CX减减1,如果,如果CX未减至未减至0,则循环,则循环计数控制循环计数控制循环先循环后判断先循环后判断第第4章:章:4.5.2 条件控制循环条件控制循环u条件控制循环需要利用特定条件条件控制循环需要利用特定条件判断循环是否结束判断循环是否结束u条件控制循环用条件转移指
15、令判条件控制循环用条件转移指令判断循环条件断循环条件u转移指令可以指定目的标号来改转移指令可以指定目的标号来改变程序的运行顺序,如果目的标变程序的运行顺序,如果目的标号指向一个重复执行的语句体的号指向一个重复执行的语句体的开始或结束,便构成了循环控制开始或结束,便构成了循环控制结构结构第第4章:显示以章:显示以0结尾的字符串结尾的字符串;数据段;数据段string db Let us have a try !,0;代码段;代码段mov bx,offset stringagain: mov dl,bxcmp dl,0jz done;为;为0结束结束mov ah,2;不为;不为0,显示,显示int
16、 21hinc bx;指向下一个字符;指向下一个字符jmp againdone:条件控制循环条件控制循环先判断后循环先判断后循环第第4章:章: 记录某个字存储单元数据记录某个字存储单元数据中中1的个数的个数;数据段数据段number dw 1110111111100100B;代码段代码段mov bx,numberxor dl,dl;循环初值:;循环初值:DL0again:test bx,0ffffh ;也可以用;也可以用cmp bx,0jz done;全部是;全部是0就可以退出循环,减少循环次数就可以退出循环,减少循环次数shl bx,1;用指令;用指令shr bx,1也可以也可以adc dl,0;利用;利用ADC指令加指令加CF的特点进行计数的特点进行计数jmp again条件控制循环条件控制循环先判断后循环先判断后循环