jcc指令

JCC指条件跳转指令,CC就是指条件码。
任何语言的底层,循环结构及条件判断,都是基于cflags寄存器+JCC指令实现的。

JCC指令中文含义英文原意检查符号位典型C应用
JZ/JE若为0则跳转;若相等则跳转jump if zero;jump if equalZF=1if (i == j);if (i == 0);
JNZ/JNE若不为0则跳转;若不相等则跳转jump if not zero;jump if not equalZF=0if (i != j);if (i != 0);
JS若为负则跳转jump if signSF=1if (i < 0);
JNS若为正则跳转jump if not signSF=0if (i > 0);
JP/JPE若1出现次数为偶数则跳转jump if Parity (Even)PF=1(null)
JNP/JPO若1出现次数为奇数则跳转jump if not parity (odd)PF=0(null)
JO若溢出则跳转jump if overflowOF=1(null)
JNO若无溢出则跳转jump if not overflowOF=0(null)
JC/JB/JNAE若进位则跳转;若低于则跳转;若不高于等于则跳转jump if carry;jump if below;jump if not above equalCF=1if (i < j);
JNC/JNB/JAE若无进位则跳转;若不低于则跳转;若高于等于则跳转;jump if not carry;jump if not below;jump if above equalCF=0if (i >= j);
JBE/JNA若低于等于则跳转;若不高于则跳转jump if below equal;jump if not aboveZF=1或CF=1if (i <= j);
JNBE/JA若不低于等于则跳转;若高于则跳转jump if not below equal;jump if aboveZF=0或CF=0if (i > j);
JL/JNGE若小于则跳转;若不大于等于则跳转jump if less;jump if not greater equalSF != OFif (si < sj);
JNL/JGE若不小于则跳转;若大于等于则跳转;jump if not less;jump if greater equalSF = OFif (si >= sj);
JLE/JNG若小于等于则跳转;若不大于则跳转jump if less equal;jump if not greaterZF != OF 或 ZF=1if (si <= sj);
JNLE/JG若不小于等于则跳转;若大于则跳转jump if not less equal;jump if greaterSF=0F 且 ZF=0if(si>sj)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我理解了你的问题,以下是使用无条件jmp和条件转移jcc指令构造while或do while循环结构的求和程序(汇编语言): ``` section .data n db 10 ; 定义n为10 sum db 0 ; 定义sum为0 section .text global _start _start: ; 初始化 mov ecx, n ; 将n的值放入ecx寄存器 xor eax, eax ; 将eax寄存器清零 xor ebx, ebx ; 将ebx寄存器清零 ; while循环开始 while: cmp ecx, 0 ; 比较ecx寄存器的值是否为0 je endwhile ; 如果ecx寄存器的值为0,跳转到endwhile add ebx, ecx ; 将ecx寄存器的值加到ebx寄存器中 dec ecx ; 将ecx寄存器的值减一 jmp while ; 跳转到while ; while循环结束 endwhile: ; 输出结果 mov al, bl ; 将ebx寄存器的值放入al寄存器 mov [sum], al ; 将al寄存器的值放入sum变量中 mov eax, 4 ; 将4放入eax寄存器,表示调用sys_write函数 mov ebx, 1 ; 将1放入ebx寄存器,表示输出到标准输出 mov ecx, sum ; 将sum的地址放入ecx寄存器,表示输出sum变量的值 mov edx, 1 ; 将1放入edx寄存器,表示输出一个字节 int 0x80 ; 调用系统调用 ; 退出程序 mov eax, 1 ; 将1放入eax寄存器,表示调用sys_exit函数 xor ebx, ebx ; 将ebx寄存器清零 int 0x80 ; 调用系统调用 ``` 上面的程序是一个简单的while循环,通过比较ecx寄存器的值是否为0来控制循环,如果ecx寄存器的值为0,跳转到endwhile处结束循环。在循环体内,使用add指令将ecx寄存器的值加到ebx寄存器中,然后将ecx寄存器的值减一,再跳转到while处继续循环。 在循环结束后,将ebx寄存器的值放入al寄存器中,再将al寄存器的值放入sum变量中,然后调用sys_write函数输出sum变量的值到标准输出。最后调用sys_exit函数退出程序。 需要注意的是,这里使用了db指令定义了n和sum变量的初始值,可以根据实际需求进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值