32位汇编语言学习笔记(11)--条件传送指令
来源:互联网 发布:淘宝网店模板制作 编辑:程序博客网 时间:2024/05/16 14:51
条件传送指令如下:
cmove S, D //等于0时传送
cmovz S, D //同cmove
cmovne S, D //不等于0时传送
cmovnz S, D //同cmovne
cmovs S, D //负数时传送
cmovns S, D //非负数时传送
cmovg S, D //有符号大于时传送
cmovnle S, D //同cmovg
cmovge S, D //有符号大于等于时传送
cmovnl S, D //同cmovge
cmovl S, D //有符号小于时传送
cmovnge S, D //同cmovl
cmovle S, D //有符号小于等于时传送
cmovng S, D //同cmovle
cmova S, D //无符号大于时传送
cmovnbe S, D //同cmova
cmovae S, D //无符号大于等于时传送
cmovnb S, D //同cmovae
cmovb S, D //无符号小于时传送
cmovnae S, D //同cmovb
cmovbe S, D //无符号小于等于时传送
cmovna S, D //同cmovbe
示例:
int absdiff(int x, int y)
{
return x < y ? y-x : x-y;
}
gcc -O1 -S -m32-march=i686 test_absdiff.c
absdiff:
pushl %ebp
movl %esp, %ebp
pushl %ebx
movl 8(%ebp), %ecx //ecx = x
movl 12(%ebp), %edx //edx = y
movl %edx, %ebx //ebx = y
subl %ecx, %ebx //ebx = y - x
movl %ecx, %eax //eax = x
subl %edx, %eax // eax = x -y
cmpl %edx, %ecx //比较x和y
cmovl %ebx, %eax //如果x小于y,eax = ebx = y -x
popl %ebx
popl %ebp
ret
如果不添加-march=i686,生成汇编代码如下:
absdiff:
pushl %ebp
movl %esp, %ebp
movl 8(%ebp), %edx //edx = x
movl 12(%ebp), %eax //eax = y
cmpl %eax, %edx //比较x和y
jge .L2 //如果x大于等于y,跳转到L2
subl %edx, %eax //eax = y - x
jmp .L4 //跳转到L4
.L2:
subl %eax, %edx //edx = x - y
movl %edx, %eax //eax = edx = x- y
.L4:
popl %ebp
ret
两份汇编代码的区别是,一个使用了条件传送,另外一个使用了跳转指令。跳转指令需要处理器做分支预测,但是条件传送指令不需要,因此,使用条件传送指令的汇编代码效率要高一点。
- 32位汇编语言学习笔记(11)--条件传送指令
- 32位汇编语言学习笔记(2)--数据传送指令
- 32位汇编语言学习笔记(6)--设置条件码
- 32位汇编语言学习笔记(32)--loop指令
- 32位汇编语言学习笔记(7)--跳转指令
- 32位汇编语言学习笔记(25)--xlat指令
- 32位汇编语言学习笔记(30)--rep movsb指令
- 32位汇编语言学习笔记(31)--rep stosb指令
- 32位汇编语言学习笔记(33)--aaa指令
- 32位汇编语言学习笔记(36)--repne scasb指令
- 汇编语言学习笔记 第二节:数据传送指令
- 32位汇编语言学习笔记(3)--leal和算术运算指令
- windows下32位汇编语言学习笔记
- windows下32位汇编语言学习笔记
- windows下32位汇编语言学习笔记
- 32位汇编语言学习笔记(18)--联合
- 条件传送指令
- 条件传送指令
- 机房合作感受
- CF 89D 题解
- Unity新UI系统概述——Auto Layout
- servlet命名改名需谨慎
- 本学期关于Android学习的总结
- 32位汇编语言学习笔记(11)--条件传送指令
- SpringMVC系列(二)HelloWorld入门
- [应用妹 --第一篇界面演示] android应用市场之快速开发
- eclipse与myeclipse恢复已删除的文件和代码
- 3.5 十大数据挖掘算法及各自优势
- Git-07_分支操作
- web工程使用ant打war包
- 【项目工具】接触Maven
- C++ primer (第五版)课后题答案(八)