关于汇编语言位图的个人看法
2012-07-05 15:09
323 查看
今日学习了汇编语言,但对其中的位图并不十分了解,网络上有对这些进行解析,基本还是很符合规则的;但我关心的是,怎么快速准确知道某个数是否符合位图,我刚自己验证的方法,目前正确的概率还是100%。
我的方法是在网络上一个方法方法上改进的,网络上方法描述:先将数据转换成二进制,然后统计1的个数,如果个数小于8,且这些1都可以同时放在八位中,这两个条件都符合基本是可以符合位图的;
但此方法有漏洞,如果细心的人可以发现,0XFFFFFF,也是符合位图的,但一个的个数有24个;0XFFFFFFFF,也是符合位图,但1的个数有32个;但0XFFFF,却不符合位图;为什么呢?
我经过验证得到改进的判定方式,我是在Keil MDK上验证的,其余编译器是否一样,我就不能保证了;
其实编译器十分的灵活,不但可以存储符合位图的数据,而且对初步不符合的数据它会进行操作,至于进行哪些操作呢,“移位”大家都是知道,但还有一个就是“取反”;也就是说0XFFFFFF这个数据,编译器是取反后进行存储的;不信的可以做下如下实验:
写入一下代码:
MOV R1, #0xffffff
MOV R2, #0xff
执行后,可以看到编译器的处理结果如下:
23: MOV R1, #0xffffff
0x00000000 E3E014FF MVN R1,#0xFF000000
24: MOV R2,#0xff
25:
0x00000004 E3A020FF MOV R2,#0x000000FF
发现没:第一条代码编译器翻译为MVN存储;
因此我总结的方法:
1.先将数据转换成二进制
2.然后统计1的个数或0的个数
3.这些数据距离在八位以内
如果,以上三个条件符合,那么可以使用位图存储;
以上仅是个人的小理解,有不当之处,烦请指教
我的方法是在网络上一个方法方法上改进的,网络上方法描述:先将数据转换成二进制,然后统计1的个数,如果个数小于8,且这些1都可以同时放在八位中,这两个条件都符合基本是可以符合位图的;
但此方法有漏洞,如果细心的人可以发现,0XFFFFFF,也是符合位图的,但一个的个数有24个;0XFFFFFFFF,也是符合位图,但1的个数有32个;但0XFFFF,却不符合位图;为什么呢?
我经过验证得到改进的判定方式,我是在Keil MDK上验证的,其余编译器是否一样,我就不能保证了;
其实编译器十分的灵活,不但可以存储符合位图的数据,而且对初步不符合的数据它会进行操作,至于进行哪些操作呢,“移位”大家都是知道,但还有一个就是“取反”;也就是说0XFFFFFF这个数据,编译器是取反后进行存储的;不信的可以做下如下实验:
写入一下代码:
MOV R1, #0xffffff
MOV R2, #0xff
执行后,可以看到编译器的处理结果如下:
23: MOV R1, #0xffffff
0x00000000 E3E014FF MVN R1,#0xFF000000
24: MOV R2,#0xff
25:
0x00000004 E3A020FF MOV R2,#0x000000FF
发现没:第一条代码编译器翻译为MVN存储;
因此我总结的方法:
1.先将数据转换成二进制
2.然后统计1的个数或0的个数
3.这些数据距离在八位以内
如果,以上三个条件符合,那么可以使用位图存储;
以上仅是个人的小理解,有不当之处,烦请指教
相关文章推荐
- C语言基础知识(个人简单总结的关于变量和函数方面)
- 关于管理的一点个人看法
- 关于高端ARM处理器选型的一些个人看法(作者:gooogleman)
- 关于程序设计语言的一些看法
- 关于高端ARM处理器选型的一些个人看法(作者:gooogleman)
- 汇编语言基础之九- 关于栈指针的规律性的总结
- 关于汇编语言寄存器和指令操作的整理
- 关于区域性网站CMS的一些个人看法
- 关于中国互联网广告趋势我个人的看法
- 关于RunLoop的几点个人看法
- 个人关于chrome浏览器的一些看法
- 关于南通大学教务管理系统微信公众号的个人看法:
- Android 关于移动互联网寒冬和个人核心竞争力的看法
- 关于C语言和汇编语言混合编程的一点思考
- 关于职业生涯的个人看法
- 关于汇编语言中cdq指令作用解惑
- 关于对c++基本语言的看法
- 关于treeview 的个人看法
- 关于360杀百度地图的个人看法
- Win32汇编语言学习笔记>>第一课,关于汇编语言以及环境配置