立即尋址方式可用來提供常數、設置初值等。常數值可分為字節、字、雙字型等數據。CPU以二進制方式存儲所有常數。在指令中可用十進制、十六進制、ASCII碼或浮點數形式來表示操作數。
立即尋址示例:
SET 說明:把RLO置1
OW W#16#320 將常量W#16#320與ACCU1“或”運算
L 1352 把整數1352裝入ACCU1
L‘ABCD’ 把ASCII碼字符ABCD裝入ACCU1
L C#100 把BCD碼常數100(計數值)裝入ACCU1
AW W#16#3A12 常數W316#3 A12與ACCU1的低位相“與”,運算結果在ACCU1的低字中。 存儲器直接尋址包括對寄存器和存儲器的直接尋址。在直接尋址的指令中,直接給出操作數的存儲單元地址,包括寄存器或存儲器的區域、長度和位置,根據這個地址就可以立即找到該數據。例如,用MW200指定位存儲區中的字,地址為200;MB100表示以字節方式存取,MW100表示存取MB100、MB101組成的字,MD100表示存取MB100~ MB103組成的雙字。在指令中,數據類型應與指令標識符相匹配。
直接尋址編程示例:
A IO.0 說明:對輸入位10.0進行“與”邏輯操作
S L20.0 把本地數據位I20.0置“l”
= M115.4 使存儲區位M115.4的內容等于RLO的內容
L IB10 把輸入字節IB10的內容裝入ACCU1
T DBD12 把ACCU1中的內容傳送給數據雙字DBD12中。
存儲器間接尋址簡稱間接尋址。該尋址方式在指令中以存儲器的形式給出操作數所在存儲器單元的地址,也就是說該存儲器的內容是操作數所在存儲器單元的地址。該存儲器一般稱為地址指針,在指令中需寫在方括號“[]”內。地址指針可以是字或雙字。對于地址范圍小于65 535(即16位二進制數所表示的最大值)的存儲器(如T、C、DB、FB、FC等)可以用字指針,其指針格式如圖所示。對于其他存儲器(如I、Q、M等)則要使用雙字指針。如果要用雙字指針訪問字節、字或雙字存儲器,必須保證指針的位編號為0,只有雙字MD、LD、DBD和DID能作雙字地址指針,存儲器間接尋址的雙字指針的格式如圖所示,位0~2(XXX)為被尋址位的位編號(范圍0~7),位3—l8為被尋址字節的字節編號(范圍0~65 535)。
圖 存儲器間接尋址的字指針格式
圖 存儲器間接尋址的雙字指針格式
存儲器間接尋址的單字格式的指針尋址示例:
L2 說明:將數字2#0000_0000_0000_0010裝入累加器1
T MW50 將累加器l低字中的內容傳給MW50作為指針值
OPN DB35 打開共享數據塊DB35
L DBW[MW50] 將共享數據塊DBW2的內容裝入累加器1
存儲器間接尋址的雙字格式的指針尋址示例:
上面程序中Q[MD2]中的MD2稱為地址指針,其里面的數值代表地址。
使用存儲器間接尋址,該存儲器的值是操作數的地址,因此改變了存儲器的值就相當于改變了操作數的地址,在循環程序中經常使用存儲器間接尋址。 寄存器間接尋址簡稱寄存器尋址。在S7中有兩個地址寄存器,分別是AR1和AR2。通過地址寄存器,可以對各存儲區的存儲器內容實現寄存器間接尋址。地址寄存器的內容加上偏移量形成地址指針,該指針指向數值所在的存儲單元。地址寄存器及偏移量必須寫在方括號“[]”內。寄存器間接尋址的語句不改變地址寄存器中的數值。用寄存器指針訪問一個字節、字或雙字時,必須保證地址指針中位地址編號為0。
地址寄存器的地址指針有兩種格式,其長度均為雙字,指針格式如圖所示。
圖 存儲器間接尋址的指針格式