C166 8位字节位运算赋值-代码优化
8位字节位运算赋值优化特记录下:
unsigned short func1()
{
unsigned short a;
return a;
}
unsigned char func2()
{
unsigned char a;
return a;
}
unsigned short u_16;
unsigned char u_8;
void sub_027F08()
{
UINT8 t8u;
// ERAM_u16_81F48 = ((sub_035EC8() == 0) & 1) <<14 | (ERAM_u16_81F48 & (~(1<<14)));
// ERAM_u8_81F64 = (FDC_INT8U)(((FDC_INT8U)sub_032AE4() != 0) & 1) << 6 | (FDC_INT8U)(ERAM_u8_81F64 & (~(1<< 6)));
u_16 = ((func1() == 0) & 1)<<14 | (u_16 & (~(1<<14)));
// u_8 = ((func1() == 0) & 1)<<14 | (u_8 & (~(1<<14)));
t8u = (func1() == 0) ? (UINT8)1: (UINT8)0;
t8u &= 1;
t8u <<= 6;
u_8 =(UINT8)t8u | (UINT8)(u_8 & (UINT8)(~(1<<6)));
return;
}
结果如下:
1264: t8u = (func1() == 0) ? (UINT8)1: (UINT8)0;
00027F34 DA02087F CALLS func1(0x27F08)
00027F38 E10A MOVB RL5,#0x00
00027F3A 4840 CMP R4,#0
00027F3C 3D01 JMPR CC_NZ,0x027F40
00027F3E E11A MOVB RL5,#0x01
1265: t8u &= 1;
00027F40 69A1 ANDB RL5,#1
1266: t8u <<= 6;
00027F42 5C65 SHL R5,#0x06
1267: u_8 =(UINT8)t8u | (UINT8)(u_8 & (UINT8)(~(1<<6)));
1268:
00027F44 F3F8D805 MOVB RL4,DPP0:0x05D8
00027F48 67F8BF00 ANDB RL4,#0x00BF
00027F4C 718A ORB RL4,RL5
00027F4E F7F8D805 MOVB DPP0:0x05D8,RL4
1269: return;
00027F52 DB00 RETS
C166 8位字节位运算赋值-代码优化的更多相关文章
- JAVA基础1——字节&位运算
占用字节数 & 取值范围 Java一共有8种基本数据类型(原始数据类型): 类型 存储要求 范围(包含) 默认值 包装类 int 4字节(32位) -2^31~ 2^31-1 0 Intege ...
- C#中的位的或运算的理解
如果懂位的运算,看到下面这2个程序执行的结果,会很容易理解,如果像我这样的菜鸟,刚接触开始肯定也觉得晕晕的,|= 这是什么运算符? |=就是位的或运算符,下面还是用上面的程序来讲解一下,为什么上面2个 ...
- 【最新】LuaJIT 32/64 位字节码,从编译到使用全纪录
网上关于 LuaJIT 的讨论,已经显得有些陈旧.如果你对 LuaJIT 编译 Lua 源文件为具体的 32位或64位字节码,极其具体使用感兴趣的话,不妨快速读一下这篇文章.此文章针对尝试在 iOS ...
- Qt 4.5发布(最大的变动是换用LGPL许可证,移植进了苹果的Cocoa框架。之前的Qt只支持Carbon框架,现在的Qt 4.5两者都支持。单一源代码创建出支持32位或64位字节的Intel或PowerPC Mac二进制文件)
Nokia的开源Qt开发工具正式发布了4.5版.如前所述,Qt 4.5最大的变动是换用LGPL许可证,目前采用的三个许可证分别为LGPL/GPL和商业许可证. 新版 ...
- C++:用字符串数组实现大数运算,以两个不高于40位的大数运算为例。
因为基本数据类型中整型的内存范围有限,所以直接进行大数之间的运算,不仅浪费空间,而且运行缓慢,甚至有些会导致数据溢出. 那怎么办呢? 这时我们就想直接不行,那咱们来间接的. 这就是我们今天主要要讲的: ...
- MD5、SHA1加密java 16位32位
MD5.SHA1加密java 16位32位 import java.math.BigInteger; import java.security.MessageDigest; public class ...
- JAVA如何把一个float四舍五入到小数点后2位,4位,或者其它指定位数.
怎么使float保留两位小数或多位小数 http://meryvn.blog.163.com/blog/static/36962664201173010402629/ 两种方法: import j ...
- [转载]使用32位64位交叉编码混淆来打败静态和动态分析工具 - wildsator
0×00 摘要 混淆是一种能增加二进制分析和逆向工程难度与成本的常用技术.主流的混淆技术都是着眼于使用与目标CPU相同的机器代码,在相同的处理器模式下,隐藏代码并进行控制.本文中引入了一种新的混淆方法 ...
- dll文件32位64位检测工具以及Windows文件夹SysWow64的坑
自从操作系统升级到64位以后,就要不断的需要面对32位.64位的问题.相信有很多人并不是很清楚32位程序与64位程序的区别,以及Program Files (x86),Program Files的区别 ...
随机推荐
- 漫步Java------接口
接口 一.定义 具有相同行为(方法),但是不相关的类 二.特点 只是提供方法,不定义方法的具体实现. 一个类只能继承一个父类,但是接口却可以继承多个接口. 接口是一个引用类型的变量 接口没有构造方法, ...
- kbmMW安全第#3 - 基于硬件的随机数#2
在之前的基于硬件的随机数博文中,我介绍了如何使用基于外部硬件的随机数生成器,来生成高质量的随机数. 但是,后来英特尔和AMD的CPU也包含随机值生成器.从2015年6月开始,来自Ivy Bridge的 ...
- RAD Studio August 2018 Roadmap
路线图: https://community.embarcadero.com/article/news/16638-rad-studio-august-2018-roadmap 路线图评论: http ...
- 使用OpenBTS基站测试物联网模块安全性
0×00 引子 近年来,随着云计算.物联网技术的快速发展,物联网的理念和相关技术产品已经广泛渗透到社会经济民生的各个领域,越来越多的穿戴设备.家用电器通过蓝牙.Wi-Fi.Li-Fi.z-wave.L ...
- python列表的11种方法
python列表的11种方法2017年11月24日 03:26:43 Milton-Long 阅读数:254版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.n ...
- CentOS7下-bash: nano: command not found
由于安装的是纯净版系统,运行nano命令是提示没有找到该命令,以下是解决方法,用root权限的用户运行以下命令安装nano: yum install nano 遇到询问时一路点y即可. 安装好后运行: ...
- 如何使用DAX函数解决动态图表标题
您可能知道,Power BI中的图表(以及许多其他可视化)具有可以设置为任何静态文本的标题.您可以通过选择图表,转到“可视化对象”窗格中的“格式”选项卡,然后更改“标题”部分中的属性(如下所示)来完成 ...
- 【计算机视觉】KCF算法
code opencv3.3.1-contrib ---- TrackerKCF.cpp opencv如何更新目标区域的过程: // calculate filter response if(par ...
- 用户密码管理和 su 命令
1.passwd root 用户给自己改 密码,直接 输入 passwd 就可以了 若是给其它用户修改密码,就需要 passwd user_name 用户锁定和解锁 passwd -l user_ ...
- 集合框架 ArrayList LinkedList(待续)
ArrayList中存储的元素的内存空间是连续的, LinkedList内存空间不是连续的 集合对象不能被序列化到硬盘中 http://blog.csdn.net/eson_15/article/de ...