立即尋址是對操作數(shù)是常數(shù)或常量的尋址方式,其特點(diǎn)是操作數(shù)值直接表示在指令中,出現(xiàn)在指令中的操作數(shù)稱為立即數(shù)。有些指令的操作數(shù)是唯一的,為簡化起見,并不在指令中寫出。
立即尋址方式可用來提供常數(shù)、設(shè)置初值等。常數(shù)值可分為字節(jié)、字、雙字型等數(shù)據(jù)。cpu以二進(jìn)制方式存儲所有常數(shù)。在指令中可用十進(jìn)制、十六進(jìn)制、ascii碼或浮點(diǎn)數(shù)形式來表示操作數(shù)。
立即尋址示例:
set 說明:把rlo置1
ow w#16#320 將常量w#16#320與accu1“或”運(yùn)算
l 1352 把整數(shù)1352裝入accu1
l‘a(chǎn)bcd’ 把a(bǔ)scii碼字符abcd裝入accu1
l c#100 把bcd碼常數(shù)100(計數(shù)值)裝入accu1
aw w#16#3a12 常數(shù)w316#3 a12與accu1的低位相“與”,運(yùn)算結(jié)果在accu1的低字中。
存儲器直接尋址包括對寄存器和存儲器的直接尋址。在直接尋址的指令中,直接給出操作數(shù)的存儲單元地址,包括寄存器或存儲器的區(qū)域、長度和位置,根據(jù)這個地址就可以立即找到該數(shù)據(jù)。例如,用mw200指定位存儲區(qū)中的字,地址為200;mb100表示以字節(jié)方式存取,mw100表示存取mb100、mb101組成的字,md100表示存取mb100~ mb103組成的雙字。在指令中,數(shù)據(jù)類型應(yīng)與指令標(biāo)識符相匹配。
直接尋址編程示例:
a io.0 說明:對輸入位10.0進(jìn)行“與”邏輯操作
s l20.0 把本地數(shù)據(jù)位i20.0置“l(fā)”
= m115.4 使存儲區(qū)位m115.4的內(nèi)容等于rlo的內(nèi)容
l ib10 把輸入字節(jié)ib10的內(nèi)容裝入accu1
t dbd12 把a(bǔ)ccu1中的內(nèi)容傳送給數(shù)據(jù)雙字dbd12中。
存儲器間接尋址簡稱間接尋址。該尋址方式在指令中以存儲器的形式給出操作數(shù)所在存儲器單元的地址,也就是說該存儲器的內(nèi)容是操作數(shù)所在存儲器單元的地址。該存儲器一般稱為地址指針,在指令中需寫在方括號“[]”內(nèi)。地址指針可以是字或雙字。對于地址范圍小于65 535(即16位二進(jìn)制數(shù)所表示的最大值)的存儲器(如t、c、db、fb、fc等)可以用字指針,其指針格式如圖所示。對于其他存儲器(如i、q、m等)則要使用雙字指針。如果要用雙字指針訪問字節(jié)、字或雙字存儲器,必須保證指針的位編號為0,只有雙字md、ld、dbd和did能作雙字地址指針,存儲器間接尋址的雙字指針的格式如圖所示,位0~2(xxx)為被尋址位的位編號(范圍0~7),位3—l8為被尋址字節(jié)的字節(jié)編號(范圍0~65 535)。
圖 存儲器間接尋址的字指針格式
圖 存儲器間接尋址的雙字指針格式
存儲器間接尋址的單字格式的指針尋址示例:
l2 說明:將數(shù)字2#0000_0000_0000_0010裝入累加器1
t mw50 將累加器l低字中的內(nèi)容傳給mw50作為指針值
opn db35 打開共享數(shù)據(jù)塊db35
l dbw[mw50] 將共享數(shù)據(jù)塊dbw2的內(nèi)容裝入累加器1
存儲器間接尋址的雙字格式的指針尋址示例:
上面程序中q[md2]中的md2稱為地址指針,其里面的數(shù)值代表地址。
使用存儲器間接尋址,該存儲器的值是操作數(shù)的地址,因此改變了存儲器的值就相當(dāng)于改變了操作數(shù)的地址,在循環(huán)程序中經(jīng)常使用存儲器間接尋址。
寄存器間接尋址簡稱寄存器尋址。在s7中有兩個地址寄存器,分別是ar1和ar2。通過地址寄存器,可以對各存儲區(qū)的存儲器內(nèi)容實現(xiàn)寄存器間接尋址。地址寄存器的內(nèi)容加上偏移量形成地址指針,該指針指向數(shù)值所在的存儲單元。地址寄存器及偏移量必須寫在方括號“[]”內(nèi)。寄存器間接尋址的語句不改變地址寄存器中的數(shù)值。用寄存器指針訪問一個字節(jié)、字或雙字時,必須保證地址指針中位地址編號為0。
地址寄存器的地址指針有兩種格式,其長度均為雙字,指針格式如圖所示。
圖 存儲器間接尋址的指針格式