请教各位高人一个编程问题,下面的这段代码是西门子标准块里面的“先进先出”功能块,他只能对单字的数据进行“先进先出”处理,我现在需要对双字的数据做“先进先出”处理,请高人看看这段程序怎么修改才能达到这个要求。
AR1 := Start address of table
L P##TABLE // ACC1 := Ptr to start of table
LAR1 // AR1 := Ptr to start of table
L W#16#0 // ACC1 := 0
L W [AR1,P#0.0] // Memory reference byte 0..1 ; ACC2 := 0
==I // if(memory reference byte 0..1 = DB#)
JZ IF01 // {
T #BLOCK_NO // ACC1 := DB#
OPN DB [#BLOCK_NO] // Open DB#
IF01: NOP 0 // }
L D [AR1,P#2.0] // ACC1 := Starting address of table
LAR1 // AR1 := Starting address of table
// Check if table is empty
L W#16#0 // ACC1 := 0
L W [AR1,P#2.0] // ACC1 := TABLE[1] // # of entries
==I // if(TABLE[1] = 0)
JZ FAIL // { FAIL }
// Remove "FIRST IN" entry from table
L W [AR1,P#4.0] // ACC1 := TABLE[3]
T #RET_VAL // FIFO := TABLE[3]
// Decrement # of entries by 1. Then, if # of entries = 0 then EXIT
L W [AR1,P#2.0] // TABLE[1] := TABLE[1] - 1
L 1 // .
-I // .
T W [AR1,P#2.0] // .
JZ EXIT // if(TABLE[1] = 0 { EXIT }
// Shift remaining entries down in the table
+AR1 P#4.0 // for(COUNT = # of entries; COUNT <> 0; COUNT -1)
L001: T #CNTR // {
L W [AR1,P#2.0] // .
T W [AR1,P#0.0] // .
+AR1 P#2.0 // AR1 := AR1 + 2 bytes
L #CNTR // .
LOOP L001 // }
EXIT: SET // RL0 := 1
JU SBR // .
FAIL: CLR // RLO := 0
SBR: SAVE // Set BR indicating function success or failure