请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
器件型号:TMS320F28335 工具/软件:TI C/C++编译器
您好!
请参阅下面的 C 和相关的反汇编和表达式窗口。
为什么 abc.A3不存储在第一个字的最高半字节中? 我预期结果为 0x00004305、而不是 0x00040305。
斯蒂芬
C 代码:
typedef unsigned int UWORD; typedef union { long Message; struct{ unsigned int A1:8; unsigned int A2:4; unsigned int A3:6; unsigned int A4:1; unsigned int A5:1; unsigned int A6:1; unsigned int A7:1; unsigned int A8:5; unsigned int A9:1; unsigned int A10:1; unsigned int A11; }bits; }ID; ID abc; int main (void) { abc.bits.a1=5; abc.bits.a2=3; abc.bits.a3=4; return 0; }
拆卸:
29.abc.bits.a1=5; 主: 009078:761F0300 MOVW DP、#0x300 00907a:CC00FF00和 AL、@0x0、#0x0000 00907c:5005 ORB AL、#0x5 00907d:9600 MOV @0x0、AL 30abc.bits.a2=3; 00907e:CC00F0FF 和 AL、@0x0、#0xf0ff 009080:1AA90300或 @AL、#0x0300 009082:9600 MOV @0x0、AL 31abc.bits.a3=4; 009083:CC01FFC0和 AL、@0x1、#0xc0 009085:5004 ORB AL、#0x4 009086:9601 MOV @0x1、AL 33返回0; 009087:9A00 MOVB AL、#0x0 34} 009088:0006 LRETR _register_unlock: 009089:761F0300 MOVW DP、#0x300 00908b:A80A MOVL @0xA、XAR4 00908c:0006 LRETR _register_lock: 00908d:761F0300 MOVW DP、#0x300 00908f:A808 MOVL @0x8、XAR4 009090:0006 LRETR _nop: 009091:0006 LRETR
表达式窗口:
ABC联合 {...} (十六进制)0x0000C000@数据 消息长0x00040305(十六进制)0x0000C000@数据 位结构 {...} (十六进制)0x0000C000@Data A1unsigned int:80x05 (十六进制)0x0000C000@Data bit 0-7 A2unsigned int:40x3 (十六进制)0x0000C000@Data bit 8-11 A3unsigned int:60x4 (十六进制)0x0000C001@Data bit 0-5 A4unsigned int:10x0 (十六进制)0x0000C001@Data bit 6 A5 unsigned int: 10x0 (十六进制)0x0000C001@数据位7 A6无符号整型:10x0 (十六进制)0x0000C001@数据位8 A7无符号整型:10x0 (十六进制)0x0000C001@数据位9 A8无符号整型:50x0 (十六进制)0x0000C001@数据位 A9无 符号整型:1 0x0 (10-14) 0x0000C001@数据位15无符号整型: 10x0 (十六进制)0x0000C002@数据位0 A11无符号整型0x0000 (十六进制)0x0000C003@数据