也正是雙字指針是一個具有位指針,"/>
西門子: | 西門子PLC總代理 |
西門子PLC: | 西門子PLC總代理商 |
德國: | 西門子PLC一級代理商 |
單價: | 面議 |
發貨期限: | 自買家付款之日起 天內發貨 |
所在地: | 直轄市 上海 上海寶山 |
有效期至: | 長期有效 |
發布時間: | 2023-12-15 04:01 |
最后更新: | 2023-12-15 04:01 |
瀏覽次數: | 148 |
采購咨詢: |
請賣家聯系我
|
單字指針存儲器間接尋址只能用址標識符是非位場合;雙字指針有位格式存,對址標識符沒有限制。也正是雙字指針是一個具有位指針,,當對字節、字雙字存儲區址進行尋址時,必須確保雙字指針內容是8倍數。
L L#+10 ,我們知道存放MD104中值應該是:
當作為雙字指針時,就應該3-18bit定byte,0-2bit指bit來確定*終指令要操作址,:
詳解西門子間接尋址(二)
先前所說存儲器間接尋址中,間接指針用M、DB、DI和L直接指,就是說,指針指向存儲區內容就是指令要執行確切址數值單元。但寄存器間接尋址中,指令要執行確切址數值單元,并非寄存器指向存儲區內容,也就是說,寄存器本身也是間接指向真正址數值單元。從寄存器到出真正址數值單元,西門子提供了兩種途徑:
1、區域內寄存器間接尋址
址寄存器間接尋址一般格式是:
〖寄存器,P#byte.bit〗統稱為:寄存器尋址指針,而〖址標識符〗上帖中談過,它包含〖存儲區符〗+〖存儲區尺寸符〗。但這里,情況有所變化。比較一下剛才例子:
X [AR1,P#1.5]
DIX可以認為是我們通常定義址標識符,DI是背景數據塊存儲區域,X是這個存儲區域尺寸符,指是背景數據塊中位。但下面一個示例中M呢?X定了存儲區域尺寸符,那么存儲區域符哪里呢?毫無疑問,AR1中!
DIX [AR1,P#1.5] 這個例子,要尋址址區域事先已經確定,AR1可以改變這個區域內確切址數值單元,我們稱之為:區域內寄存器間接尋址方式,相應,這里[AR1,P#1.5] 就叫做區域內尋址指針。
X [AR1,P#1.5] 這個例子,要尋址址區域和確切址數值單元,都未事先確定,確定了存儲大小,這就是意味著我們可以不同區域間不同址數值單元以給定區域大小進行尋址,稱之為:區域間寄存器間接尋址方式,相應,這里[AR1,P#1.5] 就叫做區域間尋址指針。
既然有著區域內和區域間尋址之分,那么,同樣AR1中,就存有不同內容,它們代表著不同含義。
址寄存器是專門用于尋址一個特殊指針區域,西門子址寄存器共有兩個:AR1和AR2,每個32位。
當使用區域內寄存器間接尋址中時,我們知道這時AR中內容指明數值單元,,區域內寄存器間接尋址時,寄存器中內容等同于上帖中提及存儲器間接尋址中雙字指針,也就是:
AR:
這樣規定,就意味著AR取值只能是:0.0 ——65535.7
例如:當AR=D4(hex)=0 0 (b),實際上就是等于26.4。
AR:
比較一下兩種格式不同,我們發現,這里第31bit被固定為1,第24、25、26位有了可以取值范圍。聰明你,肯定可以聯想到,這是用于定存儲區域。對,bit24-26取值確定了要尋址區域,它取值是這樣定義:
26、25、24位
000
001
010
011
100
101
111
當是對P區域尋址時,AR=800xxxxx
當是對Q區域尋址時,AR=820xxxxx
當是對DB區域尋址時,AR=840xxxxx
當是對L區域尋址時,AR=870xxxxx
列舉,我們有了初步AR中內容是8開頭,那么就一定是區域間尋址;要DB區中進行尋址,只需8后面跟上一個40。FFFFF指明了要尋址范圍是:
例如:當AR=840000D4(hex)=1000 0100 0 0000 (b),實際上就是等于DBX26.4。
【P#指針】
● L P#Q1.0 //把Q1.0這個指針存入ACC1,此時ACC1內容=82000008(hex)=Q1.0
● L P#MB100 //錯誤!必須byte.bit結構給定指針。
● L P#DB100.DBX26.4 //錯誤!DBX已經提供了存儲區域,不能重復定。
是區域內區域間尋址,址所存儲區域都有了定,,這里P#只能指純粹數值,如上面例子中★。