【16位汇编】neg+sbb算术运算代替逻辑跳转
来源:互联网 发布:数据猿 编辑:程序博客网 时间:2024/05/21 06:27
举例代码如下
这句代码的关键点是neg 和sbb
相关知识点
neg(求补指令)
NEG指令除了对操作数作符号取反外 会根据操作数来修改标志位CF
当操作数为0是CF修改为0 否则CF修改为1
sbb( 带借位减法指令)
SBB reg,imm/reg/mem ;reg←(reg-(imm/reg/mem)-CF)
SBB mem,imm/reg ;mem←mem-imm/reg-CF
mov ax,1 ;
sub ax,1
neg ax
sbb ax,ax
mov bx,4
lea bx,[bx-4*ax]
mov ax,1 ;ax = 1
sub ax,1 ;ax = 0
neg ax ;ax = 0 CF = 0
sbb ax,ax ;CF = 0 ax = 0
mov bx,4 ;bx = 4
lea bx,[bx-4*ax] ;bx = 4
最后bx = 4
mov ax,2 ;ax = 2
sub ax,1 ;ax = 2
neg ax ;ax = 1 CF = 1
sbb ax,ax ;CF = 1 ax = -1
mov bx,4 ;bx = 4
lea bx,[bx-4*ax] ;bx = 8
最后bx = 8
并且发现最后结果只有两种可能4或8
"模板" 一下伪代码
int nFlag
mov ax,nFlag
sub ax,1
neg ax
sbb ax,ax
mov bx,4
lea bx,[bx-4*ax]
这句相当于就是
if(nFlag = 1)
bx = 4
else
bx = 8
这样使用算术运算代替了逻辑运算 大大减少
了CPU运算周期
达到程序优化效果
- 【16位汇编】neg+sbb算术运算代替逻辑跳转
- 分支优化:neg+sbb算术运算代替逻辑跳
- neg sbb转换逻辑跳转为算术运算
- 算术逻辑位运算
- neg+sbb指令
- 研究16位汇编NEG求补指令
- 小谈16位汇编NEG求补指令
- 汇编算术运算指令
- 13_运算符_01_算术_逻辑_位运算符_扩展运算符
- Java运算符_算术_逻辑_位运算符_扩展运算符
- 常用汇编算术运算指令
- 带借位减法指令SBB,求补指令NEG
- 基于ARM9的汇编指令:数据传送指令,算术运算指令,比较指令和跳转指令
- 16-JavaScript-基本语法-运算符-算术-关系-逻辑
- JS程序设计基础:变量,算术、关系、赋值、复合赋值、逻辑、位运算符与表达式
- java中的运算符|基础 学习笔记 算术、赋值、比较、逻辑、位
- java学习之旅13--运算符_01_算术_逻辑_位运算符_扩展运算符
- Java位算术运算符
- WPF/Silverlight深度解决方案: 制作Silverlight专属的动态链接库(DLL)
- 关于加载flv,mp4视频文件拖动播放问题
- C#中千分位问题
- 杯具茶几终结完整版
- /etc/opt/sources.list backup
- 【16位汇编】neg+sbb算术运算代替逻辑跳转
- 有关Lucene的问题(1):为什么能搜的到“中华 AND 共和国”却搜不到“中华共和国”?
- Linux---Ubuntu快捷键大全
- 80后们的十个人生底线
- C#获取相对路径
- 去掉桌面上快捷方式的箭头的方法
- LOG4J 配置文件 properties --> XML
- 如何限制访问电脑磁盘
- 获取字符串中某字符出现的最后位置