下面我们了解一下赋值语句 x=y的含义。通过这个语句,我们了解一下地址的含义。
x=y;
其实就是将变量y的值赋给x。但是单片机在运行中过程十什么。这个可以通过实验获得。在keil中输入以下代码。
#include
int main(void)
{
volatile unsigned char x,y;
x=10;
y=11;
x=y;
}
编译以后我们可以获得机器码。
C:0x000C 02000F LJMP main(C:000F)
3: int main(void)
4: {
5: volatile unsigned char x,y;
6:
7: x=10;
C:0x000F 75080A MOV 0x08,#0x0A
8: y=11;
9:
C:0x0012 75090B MOV 0x09,#0x0B
10: x=y;
11:
C:0x0015 850908 MOV 0x08,0x09
12: }
浏览以上编译后的汇编,可以知道变量的地址是0x08,y的地址是0x09.
x=y;
就是将地址0x09的值送入0x08地址中。在这里x,y是字节变量。如果是整型会怎样?
我们试一下:
3: int main(void)
4: {
5: volatile unsigned int x,y;
6:
7: x=10;
C:0x0003 750800 MOV 0x08,#0x00
C:0x0006 75090A MOV 0x09,#0x0A
8: y=11;
9:
C:0x0009 750A00 MOV 0x0A,#0x00
C:0x000C 750B0B MOV 0x0B,#0x0B
10: x=y;
11:
C:0x000F 850A08 MOV 0x08,0x0A
C:0x0012 850B09 MOV 0x09,0x0B
12: }
整型占用两个字节,所以一个赋值语句x=y,需要两个MOV语句。所以在单片机编程中尽可能使用合适的数据类型。
本节,我们通过赋值语句了解一下地址概念。