您的位置:首页 > 其它

关于汇编语言位图的个人看法

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.这些数据距离在八位以内

 

如果,以上三个条件符合,那么可以使用位图存储;

以上仅是个人的小理解,有不当之处,烦请指教

      

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: