使用stm32单片机做毕设 c语言编程 老师问我寻址方式是什么 怎么回答?

Python010

使用stm32单片机做毕设 c语言编程 老师问我寻址方式是什么 怎么回答?,第1张

用C语言编程不关心什么寻址方式,在汇编语言中有体现,寻址方式是指寻找操作数的方法。汇编指令一般格式是

操作码,操作数1 操作数2

一般操作码和操作数1是固定搭配的,寻找第二个操作数的方法就是寻址方式。

例如 ADD A,#12H

操作码和操作数1共同组成一个8位的机器码,而操作数2的来源有很多

上例中操作数2是立即数,这种寻址方式就叫立即寻址,

ADD A,30H

30H 是直接地址,这种寻址方式就是直接寻址

此外还有寄存器寻址,寄存器间接寻址等多种方式。

你好!

在c语言中无法对SFR(特殊寄存器),比如程序状态寄存器(PSW)等寄存器进行操作,也就不能判断它们的标志位了。比如判断Z标志位,C标志位等操作。对于要操作这类寄存器。我们唯一的办法只能用汇编语言。或者在C语言中嵌入汇编语言来解决。所以我们写单片机程序千万不能放弃汇编语言。某些底层的硬件操作只能靠汇编语言来完成。

希望对你有所帮助,望采纳。

是这个样子的,你只要声明了位变量,比如bit a而且这个变量是全局变量,或者是函数内部的静态变量,那么,这个位变量的地上就恒不变了,只是地址是多少这个是编译器随机分配的,不敢十分确定,但是在以后的运行中,地址肯定是不变的。

如果你声明的是函数内部的动态变量,比如在函数内部声明:bit a,那么,这个位变量是随着函数的调用变化的,其地址也是变化的。

所以,你只要声明一个全局的位变量,那么,这个变量就肯定是地址不变的,当然,不知道其地址具体是多少罢了。

如果你非要知道每个地址是多少,那么,有两个办法:

1 你集中把128个位全部都定义出来。

比如,你在某个C文件里,这样写:

bit Bit00 = 0

bit Bit01 = 0

bit Bit02 = 0

bit Bit03 = 0

一直定义128个,把所有位空间占满,那么,这样,就可以肯定Bit00的地址是0x20的最低位,bit01的地址是0x20的次低位了。

2 用sbit,而不用bit.

比如:unsigned char data B_Var[16] = 0

sbit Led_Status1 = B_Var[0]^7那么,就表示Led_Status 是第20H地址中的最高位。

sbit Led_Status2 = B_Var[6]^3那么,就表示Led_Status 是第26H地址中的第3位。

这个其实并不是定义了位变量,只是起了个别名而已。但效果一样,只是注意,你更改B_Var[6],可能会更改26H的地址第3位,所以,如果你只用位,那么,就不要操作B_Var[6]这个数组元素。

其实呢,你只要定义个全局变量就行了,没有必要知道这个bit变量的地址,因为没有什么实际意义。