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