西门子编程32位地址指针改换左移3位
西门子编程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 这个存储器的数据,那么咱们能够运用下面的指令
L MW20
用寻址的办法来标明的话即是
L MW[ MD2 ] 其间MD2是一个变量,咱们期望当MD2的数值等于20的时分就能够拜访到MW20了。这个时分咱们要清醒地看到MD2是一个32位长度变量,加上中括号[ ]后,它就代表了一个32位的指针了,这个时分,假定MD2=20的话,它标明的就不是20,而是10100,依照32位指针的数据界说,它的位地址是100 字节地址是10,
那么它代表的是 2.4这么的话 L MW[MD2] 就成为了 L MW2.4 显着这么的作用是过错的,只需关于位寻址咱们才干够运用2.4这么的格局例如A M 2.4
关于字节,字,双字都不能这么写。那怎样办,按规则办,依据32位的指针格局,咱们期望它的字节地址为20,那么将最低的3位左移,
L L#20 // L#20标明整数20
SLD 3
T MD2
这么的话 MD2的数据就成为10100 000,
标明20.0 当对字节,字,双字进行寻址的时分,位地址有必要为0。这一条准则联络32位指针的数据构造就能够阐明为何要左移3位,或许乘以8 (左移3位恰当于乘以8)。啥时分移的答案也就在这其间了。