以下是你在一个帖子里回复的程序段:" void main(void) { unsigned int i; ((unsigned char data *)i)[0]=TH0; ((unsigned char data *)i)[1]=TL0; }
编译后的汇编代码:
22: void main(void) 23: { 24: unsigned int i; 25: ((unsigned char data *)i)[0]=TH0; C:0x000F A809 MOV R0,0x09 C:0x0011 A68C MOV @R0,TH0(0x8C) 26: ((unsigned char data *)i)[1]=TL0; C:0x0013 E8 MOV A,R0 C:0x0014 04 INC A C:0x0015 F8 MOV R0,A C:0x0016 A68A MOV @R0,TL0(0x8A) 27: } C:0x0018 22 RET " 我这里对((unsigned char data *)i)[0]=TH0有两种理解:一种是“把i的值强制转换成指向uchar类型的指针,对该指针指向的地址上的内容赋值”。 一种是“把i的地址强制转换成指向uchar类型的指针,对该指针指向的地址上的内容赋值”(以上面对比,“i的值”变成了“i的地址”)。 我觉得第一种是正确的,也就是把i的值强制转换,因为这里不是 ((unsigned char data *)&i)[0]=TH0//(将i取址后再强制转换) 但如果真的是第一种理解,为何i的值一开始就是0x09呢?
|