单片机C语言初始化

来源:百度知道 编辑:UC知道 时间:2024/06/15 00:39:24
本人是个单片机小菜鸟,请问各位大虾,为什么下面第8行C产生的汇编不是
MOV R0,R7呢?
程序如下:
2: void main (void)
3: { unsigned char data a,i;
4: unsigned char data *p;
5: a=0;
C:0x0800 E4 CLR A
C:0x0801 FF MOV R7,A
6: p=0x40;
C:0x0802 7840 MOV R0,#0x40
7: for(i=0;i<0x10;i++)
C:0x0804 FE MOV R6,A
8: { *p=a;
C:0x0805 A607 MOV @R0,0x07
9: p++;
C:0x0807 08 INC R0
10: a++;
C:0x0808 0F INC R7
11: }
C:0x0809 0E INC R6
C:0x080A BE10F8 CJNE R6,#0x10,C:0805
12: }
C:0x080D 22 RET
99: MOV R0,#IDATALEN - 1
C:0x080E 787F MOV R0,#0x7F
100: CLR A
C:0x0810 E4 CLR A
101: IDATALOOP: MOV @R0

上而说对了一半
为什么下面第8行C产生的汇编不是,MOV R0,R7呢?
1.首先你要明白一个问题,在C语言中的指针变量和指针的概念.
2.你要弄明白直接寻址和间接寻址的区别.
3.因为P是一个指针变量,它存放的是一个地址.而*P就是对此地址中的数据进行操作了,是间接寻址.所以是MOV @R0,0x07
如果是直接寻址则是MOV R0,0X07
有什么不明白的可以发消息给我,随时交流

因为你的是*p=a;
而不是p=&a;

我不懂的,我乱猜的

它是指针,就是没有真正的移动数据,只是指针指向那里.