三维数组
LOC(A[i,j,k])=base+(((i-low1)*n2+j-low2)*n3+k-low3)*w
=((i*n2+j)*n3+k)*w+base-((low1*n2+low2)*n3+low3)*w
数组 A
是一个三维数组,维度为 n1 × n2 × n3
,low1、low2、low3,每个元素占 w
个字节空间,基地址为 A
(常量)
数组 B
是一个二维数组,维度为 m1 × m2
,low1、low2、low3,每个元素占 w
个字节空间(与 A
相同),基地址为 B
(常量)
C_A = base_A - ((low1_A×n2 + low2_A)×n3 + low3_A)×w
C_B = base_B - (low1_B×m2 + low2_B)×w
-
计算
A[x][y][z]
的地址并加载其值。 -
计算
B[i][j]
的地址并存储加载的值。
// 计算 A[x][y][z] 的值
T1 = x * n2 (1)(*,x,n2,T1)
T1 = T1 + y (2)(+,T1,y,T1)
T2 = T1 * n3 (3)(*,T1,n3,T2)
T2 = T2 + z (4)(+,T2,z,T2)
T3=A - C_A (5)(-,A,C_A,T3)
T4=T2 * w (6)(*,T2,w,T4)
T5=T3[T4] (7)(=[ ],T3,T4,T5)
// 计算 B[i][j] 的地址并存储
T6 = i * m2 (8)(*,i,m2,T6)
T6 = T6 + j (9)(+,T6,j,T6)
T7=B - C_B (10)(-,B,C_B,T7)
T8=T6 * w (11)(*,T6,w,T8)
T7[T8]=T5 (12)([ ]=,T5,T7,T8)
四元式设计:
-
(=[], base, offset, result)
:加载操作,等价于result = *(base + offset)
-
([]=, value, base, offset)
:存储操作,等价于*(base + offset) = value
-
常量
C_A
和C_B
在编译时计算,作为常量操作数使用
while、if、数组