為什么有了這段就模擬不了,這是300/400尋址的一段舉例
劉玉蓉
發(fā)布于2014-11-03 17:17
23
0
標(biāo)簽:
L #DB_NO
T LW 0
OPN DB [LW 0]
L #DATA_1ST
T LD 2
L 0
T LD 8
L #LEN
next: T LW 6
L DBD [LD 2] //為什么有了這段就模擬不了 ??????
L LD 8
+R
T LD 8
L LD 2
L P#4.0
+D
T LD 2
L LW 6
LOOP next
L #LEN
ITD
DTR
T LD 12
L LD 8
TAK
/R
T #Average_out
佳答案
L為本地?cái)?shù)據(jù)堆棧存儲器,它是用來存儲邏輯塊(OB、FB、FC)中所使用的臨時(shí)數(shù)據(jù)。在使用32位間接尋址時(shí),必須注意對于字節(jié)、字和雙字的尋址時(shí),存儲器中的指針必須要為8的整數(shù)倍;對于間接尋址務(wù)必考慮存儲器中所有出現(xiàn)的數(shù)值對尋址結(jié)果的影響;對于字節(jié)尋址,存儲器每次至少增加8,對于字尋址,存儲器每次至少增加8,尋址,存儲器每次至少增加16,對于雙字尋址,存儲器每次至少增加32,否則容易造成訪問地址重復(fù)錯誤。
根據(jù)以上分析,暫態(tài)變量#DATA_1S內(nèi)容必須是雙整形數(shù)據(jù),必須是8的整數(shù)倍,程序中務(wù)必不能送其他數(shù)據(jù)類型,如浮動數(shù), 否則引用格式將產(chǎn)生混亂。字的起始地址必須是偶數(shù),所以暫態(tài)變量#DATA_1S內(nèi)容必須是偶數(shù)。之所以無法模擬的原因就在于:暫態(tài)變量#DATA_1S數(shù)據(jù)類型錯誤或存儲的數(shù)據(jù)不是雙整形數(shù)據(jù),造成尋址沖突。下面簡單對程序塊解釋如下:
L #DB_NO //將數(shù)據(jù)塊裝載到累加器1中的低字中;
T LW 0 //將數(shù)據(jù)塊號傳送到LWO
OPN DB [LW 0] //打開號為LW0 的數(shù)據(jù)塊
L #DATA_1ST //將暫態(tài)變量#DATA_1S內(nèi)容裝載到累加器1中
T LD 2 //將 暫態(tài)變量#DATA_1S內(nèi)容傳送到LD2
L 0 //初始化LD8
T LD 8 // 將1送至LD8
L #LEN //將暫態(tài)變量 #LEN的內(nèi)容裝載到累加器1中
next: T LW 6 //將 暫態(tài)變量 #LEN的內(nèi)容送至LW6
L DBD [LD 2] //將號為LD2的數(shù)據(jù)塊雙字裝載到累加器1中