|
发表于 2014-3-24 20:20:09
|
显示全部楼层
你的图和程序不符呀!哪里给md104赋值的?
L#0=P#0.0,L#1=P#0.1,L#16=P#2.0,你忘记‘0’了.
L L#10 10 ==> 1010 指针前三位为位地址,后面是字节地址,L#10 ==> P#1.2,所以MD104 存储的是P#1.2 AI[MD104] 即为 A I1.2
L L#+10 //以32位形式,把10放入ACC1,此时,ACC2中的内容为:16位整数10
T MD104 //这个值再存入MD104,这是个32位的位存储区域
A I[MD104] //对I1.2进行与逻辑操作!
1、I1.2是如何形成的?
分析一下上述例子中的A I[MD104] 为什么最后是对I1.2进行与逻辑操作。
通过L L#+10 ,我们知道存放在MD104中的值应该是:
MD104:0000 0000 0000 0000 0000 0000 0000 1010
当作为双字指针时,就应该按照3-18bit指定byte,0-2bit指定bit来确定最终指令要操作的地址,因此:
0000 0000 0000 0000 0000 0000 0000 1010 = 1.2
2、再举例描述一下寄存器指针的规定:
其0-2bit,指定bit位,3-18bit指定byte字节。其第31bit固定为0。
0000 0000 0000 0BBB BBBB BBBB BBBB BXXX
这样规定,就意味着的取值只能是:0.0 ——65535.7
例如:当D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),实际上就是等于26.4。
3、相关资料:
见《详解西门子间接寻址.pdf》下载:
http://ishare.iask.sina.com.cn/f/22746895.html
http://www.gongkong365.com/bbs/job.php?action=download&aid=96
大刀这阵在发狠学啊,阿鸣和大家都说得好
还可以这样想
10/8为1余2=1.2
DW#16#35--10进制的53/8为6余5=6.5
红军的确很好学 值得学习 建议认真看下阿鸣大侠给的参考。。 |
|