发布于 2011-11-30 20:09:30
26楼
也想说说我使用指针的感受,一:(位间接寻址)
1、在使用指针时:一般多是先赋值(初始化地址寄存器),后使用;
2、尽量使用常数指针加地址区域标示符来进行间接寻址,这样更容易理解;
3、在寻址时,可以结合循环次数、寻址幅度来改变寻址区域范围;
下面举一个例子参考:(统计每个周期,Q5.5~Q15.5这个地址范围内,88个位状态为1的个数,即设备运行个数)
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
L 0
T MW 100 //将上个周期的累计值清零
LAR1 P#5.5 //指针寻址的起始地址(利用指针常数,初始化地址寄存器1)
L 88 //将其修改成0-65535可以实现全地址范围内寻址
NEXT: T LW 100 //但是必须考虑其循环耗费的时间
A Q [AR1,P#0.0] //修改Q为I、M、L可实现不同存储器间的寻址
JCN M001
L MW 100
+ 1 //扫描到有状态1存在,累计个数自加1功能
T MW 100 //设备运行累计个数
M001: +AR1 P#0.1 //位地址向前推进一位
L LW 100
LOOP NEXT //循环次数减至0时,离开循环,程序往下执行
//╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬╬
需注意:+AR1 P#0.1 指令的含义,其实就是下面四条语句的集成、和浓缩!
TAR1 //将地址寄存器1的内容传送至累加器1
L P#0.1 //将累加器1的内容移至累加器2,并将指针常数 P#0.1装载到累加器1
+D //累加器1的内容加上累加器2的内容并暂存在累加器1中
LAR1 //将累加器1的内容装载到地址寄存器1中
从上面的例子和指令分解我们不难发现,地址寄存器可以直接赋值,并可以结合累加器进行灵活的地址运算!
佛对我说:“你的痛苦来自于你的欲望,没有欲望也就没有痛苦!”