关于指针-2

来源:本站
导读:目前正在解读《关于指针-2》的相关信息,《关于指针-2》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《关于指针-2》的详细说明。
简介:经常听到很多人说这么一句话,指针就是地址!这句话非常正确。所谓地址又是什么呢?地址其实就是计算机的内存的索引。

经常听到很多人说这么一句话,指针就是地址!这句话非常正确。所谓地址又是什么呢?地址其实就是计算机的内存的索引。具体到MCU,其实就是单片机的内存地址,包括数据区地址和程序区地址。在任何一款单片机的手册中都会介绍该产品的地址分布。如果使用汇编语言编程,对地址分布就非常明白了。比如将某个地址的数据移动到A寄存器中的汇编指令是 mov ACC 0x08. 就是讲内存0x08的地址中内容存储到ACC寄存器中。

为什么使用C语言的程序员觉得地址非常抽象?因为C语言的优势是不需要太关注硬件的细节。这些细节问题编译器会替我们处理好。将我们解放出来更多考虑业务层面的东西。也就是产品的具体功能应用。比如我们写出以下语句:

unsigned char x;

x=3;

这是非常简单的两句C语言的语句。第一行声明一个 无符号字符的变量x,第二行给x赋值 3.这两句非常简单。我们在写一句:

x=5;

这也是一句非常简单的语句,就是给x赋值5.

我们有没有考虑过以上三行C语句,MCU怎么去理解。也就翻译成机器码后MCU怎么执行。为了明白这一点,我们必须先明白第一句 unsigned char x,到底是什么意思。这个问题是我的同事李工给一位参加工作一年的同事提出的问题。任何人都可以回答出是声明一个变量。在向具体问,就没有下文了。

unsigned char x;这句是声明一个变量。但是“声明一个变量”又是什么意思?其实就是在内存中分配一个地址。 可以通过“x”索引到这个地址。我们重新来理解一下这三行语句,

unsigned char x; 在内存中分配出一个地址,比如0X10

x=3; 在0X10地址内存入3

x=5; 在0X10地址内存入5

是不是这样,我们做一个实验来验证一下。

void main(void)

{

volatile unsigned char x;

x =3;

x=5;

}

经过编译,进行调试,我们看到目标代码如下:

C:0x000C 02000F LJMP main(C:000F)

3: void main(void)

4: {

5: volatile unsigned char x;

6:

7: x =3;

8:

C:0x000F 750803 MOV 0x08,#0x03

9: x=5;

10:

C:0x0012 750805 MOV 0x08,#0x05

11: x=x;

12:

13:

C:0x0015 850808 MOV 0x08,0x08

14: }

提醒:《关于指针-2》最后刷新时间 2024-03-14 01:04:28,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《关于指针-2》该内容的真实性请自行鉴别。