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

[复制链接]
 楼主| MIKEZHONG 发表于 2012-1-2 09:10 | 显示全部楼层 |阅读模式
本帖最后由 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。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| MIKEZHONG 发表于 2012-1-3 16:07 | 显示全部楼层
谢谢John lee,

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

还有很长的路要走哟。继续学习哟。
john_lee 发表于 2012-1-3 20:52 | 显示全部楼层
某些知识,不在于你是否熟练掌握它,而在于你是否了解它的用处,在于当你需要这些知识时,你能否快速获取它。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

51

主题

250

帖子

1

粉丝
快速回复 返回顶部 返回列表