无分支求绝对值

思路:正数绝对值就是其本身,负数绝对值是其值各位求反末位加1

 

实现代码:

mov eax, imm32

cdq            => 利用符号扩展指令cdq先将eax的符号位扩展到edx中

xor eax, edx      => 如果edx == 0(正数)那么异或后其值不变,如果edx == 0xFFFFFFFF(负数)那么异或后等同与将eax求反

sub eax, edx      => 如果edx == 0(正数)那么相减后其值不变,如果edx == 0xFFFFFFFF(负数)那么等于值+1(eax = eax + (-(-1)))

posted @ 2016-03-02 16:21  狂奔的鸡骨架  阅读(237)  评论(0编辑  收藏  举报
AmazingCounters.com