關(guān)于指針的應(yīng)用?指向哪里?
劉玉蓉
發(fā)布于2014-11-07 17:36
192
0
標(biāo)簽:
LAR1 P##addr_1
AD DW#16#FFFFFF
L W#16#1002
T LW [AR1,P#0.0]
L 26
T LW [AR1,P#2.0]
L #WinACOldDB
T LW [AR1,P#4.0]
L DW#16#84000000
T LD [AR1,P#6.0]
這個(gè)功能塊里面的一段程序,#addr_1是定義在TEMP中的ANY 類型變量,請問這個(gè)ANY類型是個(gè)什么類型?多少位 的?另外這段程序中的指針指向什么存儲(chǔ)區(qū)域了?具體是哪個(gè)字節(jié)?,#addr_1由在什么存儲(chǔ)區(qū)域,具體哪個(gè)字節(jié)?
問題補(bǔ)充:
現(xiàn)在還有句和第二句不明白,我是這樣理解的,#addr_1本身是一個(gè)指針,句是把一個(gè)指向這個(gè)指針的指針放到LAR1中,
但是第二句是什么意思?為什么要做與操作?
佳答案
ANY是參數(shù)類型,當(dāng)參數(shù)的類型不能確定或?qū)崊⒖墒褂萌魏螖?shù)據(jù)類型時(shí),可使用該參數(shù),其占10個(gè)字節(jié);
你的這段程序是利用寄存器AR1尋址,通過地址寄存器AR1對工作存儲(chǔ)區(qū)中的臨時(shí)本地?cái)?shù)據(jù)存儲(chǔ)器(L堆棧)內(nèi)容進(jìn)行寄存器間接尋址。地址寄存器AR1的內(nèi)容加上偏移量形成指針(Pointer,指針是指向一個(gè)變量的地址,即用地址作為實(shí)參)。地址寄存器及其偏移量(如P#2.0)必須寫在方括號內(nèi)。寄存器間接尋址不改變地址寄存器的數(shù)值。用寄存器指針訪問一個(gè)字節(jié)、字或雙字時(shí),必須保證地址指針中位地址編號為0。
所以這段程序中的指針指向本地?cái)?shù)據(jù)存儲(chǔ)器(又稱本地?cái)?shù)據(jù)寄存器),如LW[AR1,P#2.0]是指本地?cái)?shù)據(jù)值:假設(shè)暫態(tài)變量#addr_1的值為26(指令LAR1 P##addr_1是將地址指針常數(shù)(暫態(tài)變量#addr_1)直接裝載到地址寄存器AR1中)
AR1的值=26=2#0000 0000 0000 0000 0000 0000 1101 0 000
P#2.0=2#0000 0000 0000 0000 0000 0000 0001 0 000
所以AR1加偏移量P#2.0的結(jié)果:2#0000 0000 0000 0000 0000 0000 1110 0 000,把字節(jié)相加,后3位為位號相加LW28,所以程序執(zhí)行的結(jié)果是累加器AR1加指針偏移量指明存儲(chǔ)字為本地?cái)?shù)據(jù)字LW28,將累加器1中的內(nèi)容
所以#addr_1本身是將一個(gè)暫態(tài)變量作為一個(gè)指針,句是把一個(gè)指向這個(gè)指針的指針放到LAR1中
AD DW#16#FFFFFF // 將將累加器1中的內(nèi)容與16#FFFFFF進(jìn)行雙字相”與“,由于FFFFFF每位都為”1“,結(jié)果不變,實(shí)際沒有意義。