A. c语言中,如何定义单片机的寄存器
1.
位地址在汇编语言中,只能直接寻址,不支持间接寻址。那么,在
C
语言中,也就不能用指针来操作。所以不能定义单片机的寄存器。
2.
访问寄存器可以通过直接地址引用来完成。
例如52单片机的寄存器有4组,分别为00H-07H,08H-0FH,10H-17H,18H-1FH,各组均8字节,要结合程序状态字寄存器PSW(D0H)中的RS0,RS1的组合来确定是哪一组。
可以定义一个访问Rn的函数
typedef unsigned char uchar;
uchar dacRn(uchar n) //n=[0..7]
{
uchar data *p;
n += (PSW & 0x18); //PSW 7:CY 6:AC 5:F0 4:RS1 3:RS0 2:OV 1:F1 0:P
//本来要右移三位变为0-3,但由于是8个一组要乘以8(左移3位),所以直接加上寄存器编号就可以了
return *(uchar data *)n;
}
B. c语言如何读寄存器的值
1、首先,输入寄存器变量关键字【register】。
注意事项:
C语言描述问题比汇编语言迅速、工作量小、可读性好、易于调试、修改和移植,而代码质量与汇编语言相当。C语言一般只比汇编语言代码生成的目标程序效率低10%~20%。因此,C语言可以编写系统软件。
C. C语言中"void add(void)"是什么意思
C++函数库中没有add()这个函数,这个函数是用户自定义函数,根据这个函数名称来看,是求和运算的函数,因为没有返回值,也没有传递参数,所以应该是求几个全局变量的和,结果也是全局变量。
ADD表示相加的指令(),格式为ADDXF 20H,F;表示将X和20H里面的值相加,然后放到工作寄存器或者文件寄存器中,其决定与F的值,其中F可以为1和0,为1时表示把相加的结果存入(F)文件寄存器,为0时表示把相加的结果存入(W)工作寄存器中。当然前面的例子中的20H可以是其他的地址值,X一般是工作寄存器W。
(3)c语言标志寄存器扩展阅读:
ADD指令完成目的操作数与源操作数相加,将结果存回目标操作数,并根据相加结果设置标志寄存器的CF,PF,AF,ZF,SF,OF
目标操作数可以是寄存器或者存储器,源操作数可以是立即数,寄存器或者存储器。但是源操作数和目标操作数不能同时为存储器。另外,不能对段寄存器进行加法运算(段寄存器不能参加减法,乘法,除法运算)。加法指令的操作数可以是8位,也可以是16位,但是类型要匹配。(如:ADD BX,CH该指令是错的)。