西門子間接尋址的詳細介紹
發布日期:
2023-02-17

在先前所說的存儲(chu) 器間接尋址中,間接指針用M、DB、DI和L直接指定,就是說,指針指向的存儲(chu) 區內(nei) 容就是指令要執行的確切地址數值單元。但在 寄存器 間接尋址中,指令要執行的確切地址數值單元,並非寄存器指向的存儲(chu) 區內(nei) 容,也就是說,寄存器本身也是間接的指向真正的地址數值單元。從(cong) 寄存器到得出真正的地址數值單元,西門子提供了兩(liang) 種途徑:

1、區域內(nei) 寄存器間接尋址

2、區域間寄存器間接尋址

地址寄存器間接尋址的一般格式是:

〖地址標識符〗〖寄存器,P#byte.bit〗,比如:DIX[AR1,P#1.5] 或 M[AR1,P#0.0] 。

〖寄存器,P#byte.bit〗統稱為(wei) :寄存器尋址指針,而〖地址標識符〗在上帖中談過,它包含〖存儲(chu) 區符〗+〖存儲(chu) 區尺寸符〗。但在這裏,情況有所變化。比較一下剛才的例子:

DIX [AR1,P#1.5]

X [AR1,P#1.5]

DIX可以認為(wei) 是我們(men) 通常定義(yi) 的地址標識符,DI是背景數據塊存儲(chu) 區域,X是這個(ge) 存儲(chu) 區域的尺寸符,指的是背景數據塊中的位。但下麵一個(ge) 示例中的M呢?X隻是指定了存儲(chu) 區域的尺寸符,那麽(me) 存儲(chu) 區域符在哪裏呢?毫無疑問,在AR1中!

DIX [AR1,P#1.5] 這個(ge) 例子,要尋址的地址區域事先已經確定,AR1可以改變的隻是這個(ge) 區域內(nei) 的確切地址數值單元,所以我們(men) 稱之為(wei) :區域內(nei) 寄存器間接尋址方式,相應的,這裏的[AR1,P#1.5] 就叫做區域內(nei) 尋址指針。

X [AR1,P#1.5] 這個(ge) 例子,要尋址的地址區域和確切的地址數值單元,都未事先確定,隻是確定了存儲(chu) 大小,這就是意味著我們(men) 可以在不同的區域間的不同地址數值單元以給定的區域大小進行尋址,所以稱之為(wei) :區域間寄存器間接尋址方式,相應的,這裏的[AR1,P#1.5] 就叫做區域間尋址指針。

既然有著區域內(nei) 和區域間尋址之分,那麽(me) ,同樣的AR1中,就存有不同的內(nei) 容,它們(men) 代表著不同的含義(yi) 。

【AR的格式】

地址寄存器是專(zhuan) 門用於(yu) 尋址的一個(ge) 特殊指針區域,西門子的地址寄存器共有兩(liang) 個(ge) :AR1和AR2,每個(ge) 32位。

當使用在區域內(nei) 寄存器間接尋址中時,我們(men) 知道這時的AR中的內(nei) 容隻是指明數值單元,因此,區域內(nei) 寄存器間接尋址時,寄存器中的內(nei) 容等同於(yu) 上帖中提及的存儲(chu) 器間接尋址中的雙字指針,也就是:

其0-2bit,指定bit位,3-18bit指定byte字節。其第31bit固定為(wei) 0。

AR:

0000 0000 0000 0BBB BBBB BBBB BBBB BXXX

這樣規定,就意味著AR的取值隻能是:0.0 ——65535.7

例如:當AR=D4(hex)=0000 0000 0000 0000 0000 0000 1101 0100(b),實際上就是等於(yu) 26.4。

而在區域間寄存器間接尋址中,由於(yu) 要尋址的區域也要在AR中指定,顯然這時的AR中內(nei) 容肯定於(yu) 寄存器區域內(nei) 間接尋址時,對AR內(nei) 容的要求,或者說規定不同。

AR:

1000 0YYY 0000 0BBB BBBB BBBB BBBB BXXX

比較一下兩(liang) 種格式的不同,我們(men) 發現,這裏的第31bit被固定為(wei) 1,同時,第24、25、26位有了可以取值的範圍。聰明的你,肯定可以聯想到,這是用於(yu) 指定存儲(chu) 區域的。對,bit24-26的取值確定了要尋址的區域,它的取值是這樣定義(yi) 的:

區域標識符

26、25、24位

P(外部輸入輸出)

000

I(輸入映像區)

001

Q(輸出映像區)

010

M(位存儲(chu) 區)

011

DB(數據塊)

100

DI(背景數據塊)

101

L(暫存數據區,也叫局域數據)

111

如果我們(men) 把這樣的AR內(nei) 容,用HEX表示的話,那麽(me) 就有:

當是對P區域尋址時,AR=800xxxxx

當是對I區域尋址時,AR=810xxxxx

當是對Q區域尋址時,AR=820xxxxx

當是對M區域尋址時,AR=830xxxxx

當是對DB區域尋址時,AR=840xxxxx

當是對DI區域尋址時,AR=850xxxxx

當是對L區域尋址時,AR=870xxxxx

經過列舉(ju) ,我們(men) 有了初步的結論:如果AR中的內(nei) 容是8開頭,那麽(me) 就一定是區域間尋址;如果要在DB區中進行尋址,隻需在8後麵跟上一個(ge) 40。84000000-840FFFFF指明了要尋址的範圍是:

DB區的0.0——65535.7。

例如:當AR=840000D4(hex)=1000 0100 0000 0000 0000 0000 1101 0100(b),實際上就是等於(yu) DBX26.4。

聲明:部分內(nei) 容來源於(yu) 網絡,如侵權請後台留言聯係刪除。