打印

各位元旦快乐,ARM的汇编指令难懂,给点建议!

[复制链接]
2776|5
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 MIKEZHONG 于 2012-1-2 09:40 编辑

各位元旦快乐,ARM的汇编指令难懂,请各位帮忙给点建议!

我看了杜春雷的ARM体系与结构书中的汇编,简直是云里雾里,怎么说我用单片机汇编也有二年了,

各位是否有好的建议或好的**可以推荐下。谢谢了。

比如说如下一段话是什么意思?
/***************************************************
在ARM指令中,灵活使用第2个操作数可以提高代码效率,第2个操作数的形式如下:
#immed_8r

常数表达式,该常数必须对应8位位图,即常数是由一个8位的常数循环移偶数位得到。

合法常量:
0x3FC,0,0XF0000000,200,0XF0000001;
非法常量:
0X1FE,511,0XFFFF,0X1010,0XF0000010,
/*****************************************************/
为什么说那些数是合法与不合法,是怎么来的?为什么是移偶数位?常数直接赋值不就可以了吗?????

相关帖子

沙发
john_lee| | 2012-1-2 19:45 | 只看该作者
合法:
0x3fc == 0xff << 2;         // 8位立即数0xff, 左移2位(偶数)
0xf0000000 == 0xf0 << 24; // 8位立即数0xf0, 左移24位(偶数)
200 == 0xc8 << 0;        // 8位立即数0xc8, 左移0位(偶数)
0xf0000001 == 0x1f << 28; // 8位立即数0x1f, 左移28位(偶数)
非法:
0x1fe == 0xff << 1;        // 8位立即数0xff, 左移1位(奇数)
511 == 0x1ff;                    // 9位立即数
0xffff;                              // 16位立即数
0x1010;                          // 13位立即数
0xf0000010 = 0x10f << 28;  // 9位立即数

使用特权

评论回复
板凳
MIKEZHONG|  楼主 | 2012-1-3 10:35 | 只看该作者
谢谢John lee,

为什么一定要是移偶数位的常数呢。

使用特权

评论回复
地板
john_lee| | 2012-1-3 11:53 | 只看该作者
在 ARM 的 Data Processing 指令位图定义中,对立即操作数移位的操作数只有 4bits(bit8-bit11),而生成 32bits 数据的完整移位位数需要 5bits,为了保证移位的范围,只能损失一些精度了,所以,移位的常数只能是偶数,相当于 4bits 的移位常数 * 2,扩展为 5bits,而最低位永远为 0。

使用特权

评论回复
5
MIKEZHONG|  楼主 | 2012-1-3 16:07 | 只看该作者
谢谢John lee,

明白一点了,这样有什么用呢,

还有很长的路要走哟。继续学习哟。

使用特权

评论回复
6
john_lee| | 2012-1-3 20:52 | 只看该作者
某些知识,不在于你是否熟练掌握它,而在于你是否了解它的用处,在于当你需要这些知识时,你能否快速获取它。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

250

帖子

1

粉丝