PLC中为什么要间接寻址直接寻址不得吗?求解释
因为用样的情况下,用间接寻址比直接寻址快。用间接寻址1句话的场合,如果用直接寻址,可能无法完成,或者能完成可却要写几十几百几千句。
存储器间接寻址址给定格式是:址标识符+指针。指针所指示存储单元中所包含数值,就是址确切数值单元。存储器间接寻址具有两个指针格式:单字和双字。单字指针是一个16bit结构,从0-15bit,指示一个从0-65535数值,这个数值就是被寻址存储区域编号。
扩展资料
寄存器间接寻址为通过 CPU的地址寄存器AR1,AR2进行寻址。AR1,AR2 均为 32 位寄存器,寄存器间接寻址只使用 32 位指针。分为内部区域间接寻址和交叉区域寻址。
内部区域寄存器间接寻址
指针格式与存储器间接寻址的 32 位指针相同,第 0 位~ 第 2 位作为寻址操作的位地址,第 3 位~第 18 位作为寻址操作的字节地址,第 19 位 ~第 31 位没有定义,32 位指针的格式。
交叉区域寄存器间接寻址
包含有存储器区域信息的指针,称为交叉区域指针。同样,交叉区域指针为 32 位,寄存器间接寻址要使用地址寄存器 AR1 或 AR2。32 位交叉区域指针,左起 0~18 位格式与 32 位内部区域指针相同,19~23 位,27~20 位未定义,31 位为交叉区域指针标识位。
24~26 位是存储区域地址标识,8 中组合表示 8 种存储器区域。
2022-05-15 广告
例如,
直接寻址是你直接对一个区间的变量赋值或者搬移,例如MOV 500,VB100;
间接寻址是你对一个地址赋值或者搬移,例如,你先将 VB100的地址赋给AC1,指令是
MOVD &VB100,AC1
然后再MOVD 500,*AC1。
这样的两种做法的结果相同;
这样看,感觉好像直接寻址更方便,其实不然,比如如果你是要根据条件赋值给VB100~VB200中的其中一个;
如果你用直接寻址,那么你得根据条件写一百个这样的指令;例如MOV 500,VB100;MOV 500,VB101。。。。。。
如果你用间接寻址,那么你还是用上述两句话,
MOVD &VB100,AC1;
这时候你的AC1就相当于有了VB100的地址,你再加一句,ADDD AC1,VB10;
之后再用MOVD 500,*AC1;以后你只需要对VB10赋值,就可以随意的进行更改你要用的VB,例如VB10 = 1的话,就相当于给VB101赋值。这样的用法在大规模的程序中,是非常方便的。
大多数情况下都是直接寻址,间接寻址用的很少。
2012-11-02