操作码,操作数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变量的地址,因为没有什么实际意义。