間接尋址是使用指針訪問存儲器中數據的尋址方式,一般可結合算法進行處理數據,間接尋址過程可分三個步驟:建立指針,指針操作和傳送數據。
一、建立指針
指針定義為包含另一個存儲位置地址的雙字存儲地址。
編程時,先確定好被尋址的存儲區域(例如MB10至MB20)。確定好指針初始指向的地址(例如MB10),做法:此存儲地址名稱前加一個符號 “&”,只能用下列存儲區:I、Q、V、M、S、T(僅限當前值)、C(僅限當前值)、SM、AI 和 AQ,例如&MB10;
然后設定用于存儲 被尋址的存儲地址(&MB10)的存儲地址(指針),但只能使用V存儲區,L 存儲區和累加器寄存器(AC1、AC2、AC3)用作指針,例如用AC1;
最后通過“移動雙字”(MOV_DW)指令,將被尋址的存儲地址(&MB10)移至指針位置(AC1),提個醒:程序運行時,AC1保存不是數據,而是被指向的存儲地址MB10。
二、指針操作
建立好指針后,若想實現數據的交換與計算,需要對指針的值進行修改,該采用何種數據類型的算數運算呢?如果采用累加器當指針,則無限制(所以建議用累加器當指針),如果用V或L存儲區,則需要雙整數運算指令,如下圖所示。
(圖1)
此外,對指針的偏移大小也有規定,依據第一步你確定好的被尋址的存儲區域(例如MB10至MB20)數據類型來確定:
假設指針初始指向數據區的第一個地址。
若是字節,指針值必須加1,即可指向下一個地址(MB11);
若是字(例如MW10至MW20),指針值必須加 2,即可指向下一個地址(MW12),若指針加1,即將指向MW11;
若是雙字(例如MD10至MD20),指針值必須加 4,即可指向下一個地址(MD14),若指針加1,即將指向MD11。
一定要注意,不然指針就亂指了!
三、傳送數據
當操作指針偏移到需要的位置時(目標數據),即可進行數據處理;通過在指針(AC1)前面輸入一個星號“*”(*AC1),然后可使用傳送指令(MOV_B、MOV_W和MOV_D)或算數運算等指令,將指針指向的存儲地址的數值進行處理。
四、編程實例
通過間接尋址方式,將MB12的數據傳輸至VB400。以上只是舉個最簡單的例子,大伙可以自行嘗試下:將MB10至MB20的數據定時傳輸至VB400,以此循環。
當位M0.0使能2次,VB400值等于160
五、數據示意圖