汇编语言----条件处理

1. CPU状态标志

    状态标志位是汇编条件处理的基石。

CF(carry flag)进位标志
PF(parith flag)奇偶标志
AF(auxiliary carry flag)赋助进位标志
ZF(Zero flag)零标志
SF(sign flag)符号标志(有符号,无符号)
OF(overlow flag)溢出标志

2. 布尔和比较指令

2.1 and

    影响: 总是清除CF OF, 修改ZF, PF

    描述: 对每个操作数进行位与计算,结果保存在目的操作数中。

    例子:

          有如下的代码:

               G`MN`~PPSFSZJHRJ9KA}4]L

          我们调试一下:

                       34U()OA[@TWW@WO2%O7NI80

2.2 or

    影响: 总是清除CF OF, 修改ZF, PF

    描述: 对每个操作数进行位或计算,结果保存在目的操作数中。

    例子: 常用 or al, al 来判断al 是不是问0

ZFSFal的值
00>0
10=0
01<0

             

             $VHQYQ_ZS4QNTV8)4)WNA[F

    @}K9Y2D0(0QV~S9CONX8{OB)6D[@L6NZ12F7{6811~I6@1

2.3 xor

    影响: 总是清除CF OF, 修改ZF, PF

    描述: 对每个操作数进行位异或计算,结果保存在目的操作数中。

2.4 not

     影响:不影响任何标志位

     描述: 安位取反

2.5 test

      执行隐含的 and 操作。 和and的唯一区别是不影响目的操作数。

2.6 cmp

    影响:  修改ZF, PF  AG, SF, OF

    描述: 对每个操作数隐含的减法运算,不影响目的操作数。

cmp的结果标志
目的<源SF != OF
目的>源SF = OF
目的 = 源ZF = 1

3. 条件跳转

3.1 基于CPU标志位的跳转
JZZF =1 则跳
JNZZF != 1
JCCF =1
JNCCF ! =1
JOOF =1
JNOOF != 1
JSSF =1
JNSSF != 1
JPPF = 1
JNPPF != 1
3.2 比较
3.2.1 相等比较
JE相等则跳
jne不相等则跳
JCXZCX = 0则跳
JECXZECX = 0 则跳
3.2.2 无符号比较
JA大于则跳
JNBE不小于或等于则跳(= ja)
jae大于或等于则跳
jnb不小于则跳
jb小于则跳
jnae不大于或等于则跳
jbe小于或等于则跳
jna大于则跳
3.2.3 有符号比较
JG大于则跳
HNLE不小于或等于则跳
JGB大于或等于则跳
JNL不小于则跳
JL小于则跳
JNGE不大于或等于则跳
JLE小于或等于则跳
JNG大于则跳
3.3 列子

    下面的例子是查找16位数组的第一个非0值

LMMXZ291ENLLZLD$(P]H{R0

3.4 条件结构
1 if ( op1 == op2)
2
3 ……
4
5 else
6
7 ……

对应的汇编

1 mov eax, op1
2
3 cmp eax, ope2
4
5 je L1
1 if (a1 > b1) && (b1 > c1)
2
3 x = 1

对应的汇编结构

1 cmp a1, b1
2
3 ja L1
4
5 jmp next
6
7 L1:
8
9 cmp b1, c1
10
11 ja L2
12
13 jmp next
14
15 L2;
16
17 mov x, 1
18
19 next:
1 if (a1 > b1) || b1 > c1
2
3 x = 1

对应的汇编结构:

1 cmp al,b1
2
3 ja L1
4
5 cmp b1, c1
6
7 jbe next
8
9 L1 mov x, 1
10
11 next:
1 while (val1 < val2)
2
3 {
4
5 val1 ++ ;
6
7 val2 -- ;
8
9 }

对应的汇编结构:

1 mov eax, val1
2
3   while :
4
5 cmp eax, val2
6
7 jnl endWhile
8
9 jnc eax
10
11 dec val2
12
13 jmp while
14
15 endWhile:
16
17 mov val1, eax

转载于:https://www.cnblogs.com/sld666666/archive/2011/04/30/2033637.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值