quote:以下是引用n次看你的背影在2012-04-03 15:01:33的发言:quote:以下是引用cher在2012-04-03 09:48:25的发言:quote:以下是引用n次看你的背影在2012-04-01 21:08:49的发言:
如果不移位,那麽ld0必须是8的整数倍!
谢谢N侠的指点,这些我是知道的,只是对L区还是有一些疑惑,在FC或者FB中定义临时变量会自动分配给一个L区的值,会不会出现这样的问题,如果FC1中temp用到了LD20,FC2中也用到了LD20导致程序运行出错呢?
cher:youhm大侠说的是正确的。
我举一参考例子说明一下吧:
比如FC1里面需要实现这样的浮点算法 y=a×b+c×d
那么可以这样:
L #a
L #b
*R
T LD20 //暂存a×b的结果,是一个中间运算过程;
L #c
L #d
*R
L LD20
+R
T #y
等这段程序执行完成以后,LD20暂存数据的使命已经完成,它已经被释放,可以被接下来的程序所使用。
比如接下来执行FB1,FB1里面需要实现这样的浮点算法 Y=A×B+C×D
L #A
L #B
*R
T LD20 //暂存A×B的结果,是一个中间运算过程;
L #C
L #D
*R
L LD20
+R
T #Y
这段程序同样也使用了LD20,它将A×B的结果覆盖了原来的数据,但并没有影响FC1执行的结果;FC1中的LD20也没有影响FB1执行的结果。也就是说L区只要遵循先赋值后使用的原则,在一个周期里面可以被多个FC或者FB多次使用!每款CPU的L区的大小会不一样,使用L区时,需要注意L区的地址范围和子程序的嵌套深度,如果超出地址范围,没有相应的中断,CPU会进入STOP模式,切记!
学习了,有问题再请教大师!!