Intel汇编语言程序设计学习-第六章 条件处理-中

6.3  条件跳转

6.3.1  条件结构

    在IA-32指令集中没有高级的逻辑结构,但无论多么复杂的结构,都可以使用比较和跳转指令组合来实现。执行条件语句包括两个步骤:首先,使用CMPAND,SUB之类的指令修改CPU标志六七次,使用条件跳转指令测试并导致向新地址的分支转移。

    例子1:使用CMP指令比较AL0,如果CPU指令设置了零标志,那么JZ(为0则跳转)指令就跳转到标号L1处:

cmp al ,0

jz L1

.

.

L1:

 

6.3.2  条件跳转(Jcond)指令

    条件跳转指令在标志条件为真时分支跳转到新的目的标号处,如果条件标志为假,那么执行紧跟在跳转跳转指令之后的指令。格式如下:

        jcond 目标地址

    格式中的cond指的是一个标志条件,用来表示一个或多个标志的状态。例如:

      jc    如果进位则跳转

      jnc   如果无进位则跳转

      jz    如果为零则跳转

      jnz   如果不为零则跳转

    我们已经知道算数指令。比较指令和布尔指令几乎重视会设置标志位、条件跳转指令检查标志位的状态并且根据标志位的状态决定是否跳转。

    限制:MASM在默认情况下要求跳转的目的地址在当前的过程之内,为了突破这种限制,可以声明一个全局标号(标号后面跟”::”:

jc MyLabel

.

.

MyLabel::


通常,应尽量避免跳转到当前的过程之外,否则调试程序时会比较困难。

    在Intel386之前,跳转的目标地址被限制在跳转指令后的第一条指令+128~-127个字节范围之内。IA-32处理器可跳转到当前段内的任何地址。

    使用CMP指令:假设我们想在AX等于5时跳转到位置L1处。假设AX等于5CMP指令设置了零标志,由于零标志置位了,执行JE指令就会发生跳转:

    cmp ax,5

    je  L1       ;相等则跳转

    如果AX不等于5CMP就会清楚零标志,执行JE指令就不会发生跳转,在下面的例子中,由于AX小于6而发生了跳转:

    mov  ax ,5

    cmp  ax,6

    jl     L1    ;如果小于则跳转大于是(jg

6.3.3  条件跳转指令的类型

     IA-32指令集中跳转中的数目惊人地多,支持根据有符号、无符号整数的比较以及对CPU状态标志的检查进行跳转的一系列指令,跳转跳转指令可分成下面四类:

1.基于特定的标志值。

2.根据两个操作数是否相等,或根据(ECX的值的。

3.基于无符号操作数的比较结果的。

4.基于有符号操作数的比较结果的。

下表列出了基于特定CPU

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值