加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

西门子编程32位地址指针转换为什么左移3位?

(2012-11-14 10:46:57)
标签:

杂谈

    西门子编程32位地址指针转换为什么要移3位,移多少位不是随意规定的,那么这个是怎么来的呢?先来看看指针数据类型的存储格式是怎么样的,这里就直接说32位的存储器寻址吧。

32位的指针当然是32位的,它的每一位都有特殊的含义。这个必须先要了解。

0000 0000 0000 0BBB BBBB BBBB BBBB BXXX

0-2(X) 表示位地址。

3-18(B)表示字节地址。

19-31(0) 没有定义。

XXX 表示从 000-111 正好可以代表 .0- .7 ,所以称它为位地址

BBB表示的范围是0-65536 这个范围,正好可以覆盖I Q M L DB的表示范围,所以称它为字节地址。 

比如我们读取 MW20 这个存储器的数据,那么我们可以使用下面的指令

  MW20

用寻址的方式来表示的话就是

  L MW[ MD2 ] 其中MD2是一个变量,我们希望当MD2的数值等于20的时候就可以访问到MW20了。这个时候我们要清醒地看到MD2是一个32位长度变量,加上中括号]后,它就代表了一个32位的指针了,这个时候,如果MD2=20的话,它表示的就不是20,而是10100,按照32位指针的数据定义,它的位地址是100 字节地址是10
那么它代表的是 2.4这样的话 MW[MD2] 就变成了 MW2.4 显然这样的结果是错误的,只有对于位寻址我们才可以使用2.4这样的格式例如2.4 
对于字节,字,双字都不能这样写。那怎么办,按规矩办,根据32位的指针格式,我们希望它的字节地址为20,那么将最低的3位左移,
L#20 // L#20
表示整数20
SLD 3
MD2
这样的话 MD2的数据就变成10100 000
表示20.0 当对字节,字,双字进行寻址的时候,位地址必须为0。这一条原则结合32位指针的数据结构就可以解释为什么要左移3位,或者乘以(左移3位相当于乘以8)。什么时候移的答案也就在这其中了。

转自wsj180的博客

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有