2.4.1.结构大小

声明结构时,将整体大小保持在 64 个字以下。

在直接寻址模式中,6 位偏移值与 16 位 DP 寄存器连接。偏移值允许相对于当前 DP 寄存器值寻址 0 到 63 个字。大于 64 字的结构在访问相隔 64 字的字段之前需要更新 DP,由于存在额外的 DP 更新指令,这会导致代码效率降低。

表 2.1 比较 2 个结构 - Test1 大于 64 个字,Test2 小于 64 个字。表 2.2 比较了针对有权访问每个结构的函数所生成的汇编代码。较大的结构需要额外的 MOVW 指令才能在访问字段 b 之前设置 DP。

表 2.1 所生成代码的结构大小和效率
结构 Test1 大于 64 个字 结构 Test2 小于 64 个字
typedefstruct{inta;intarray[63];intb;}Test1;Test1t1;voidtest1(){t1.a=t1.b;t1.b=42;}
typedefstruct{inta;intarray[32];intb;}Test2;Test2t2;voidtest2(){t2.a=t2.b;t2.b=42;}
表 2.2 所生成代码的结构大小和效率
||test1||: MOVW DP,#||t1||+64 MOV AL,@||t1||+64 MOVW DP,#||t1|| MOV @||t1||,AL MOVW DP,#||t1||+64 MOVB @||t1||+64,#42,UNC LRETR
||test2||: MOVW DP,#||t2||+33 MOV AL,@||t2||+33 MOV @||t2||,AL MOVB @||t2||+33,#42,UNC LRETR