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。
结构 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;} |
||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 |