間接尋址方式是指通過使用指針來存取存儲器中的數據的一種尋址方式。S7-200 CPU允許使用指針對I、Q、V、M、S、T(僅當前值)和C(僅當前值)存儲區域進行間接尋址,但不能對獨立的位或模擬量進行間接尋址。使用間接尋址方式存取數據的過程如下。
(1)建立指針
使用間接尋址之前應創建一個指向該位置的指針。由于存儲器的物理地址為32位,所以指針的長度應當為雙字,只能用變量存儲器V、局部存儲器L或累加器AC1、AC2和AC3作指針。
為了生成指針,必須用雙字傳送指令( MOVD)將要間接尋址的某存儲器的地址裝入用來作為指針的編程元件中,裝入的是地址而不是數據本身。例如,
MOVD &VB200, AC1 //VB200的地址送入AC1,建立指針
MOVD &C3, VD6 //C3的地址送入VD6,建立指針
MOVD &MB4, LD8 //MB4的地址送入LD6,建立指針
指令的輸入操作數開始處使用“&”符號,表示所尋址的操作數是要進行間接尋址的存儲器的地址;指令的輸出操作數是指針所指向的存儲器地址,其數據長度為雙字。
(2)用指針來存取數據
用指針來存取數據時,操作數前加“*”號,表示該操作數為一個指針。圖2-17中的“*AC1”表示AC1是一個指針,*AC1是MOVW指令確定的一個字長的數據。此例中,存于VB101和VB102的數據被傳送到累加器ACO的低16位。
圖2-17 指針間接尋址方式
(3)修改指針
連續存取指針所指的數據時,因為指針是32位的數據,應使用雙字指令來修改指針值,如雙字加法(ADDD)或雙字加1(INCD)指令。修改時需要根據所存取的數據長度來正確調整指針。當存取字節數據時,指針調整單位為1,即可執行1次INCD指令;當存取字時,指針調整單位為2;當存取雙字時,指針調整單位為4,如圖2-18所示。
圖2-18 改變指針尋址方式