都说x86搞多了会思维定势,现在思维定势果然来了
在51下写code写得很痛苦啊~
当然,也因为对硬件还不熟……
疑问:
1. 关于sbit的地址
比如一个语句 if(TF0){……}
头文件里有sbit TF0 = 0x8D; //显然这个0x8D不是byte的地址,而是一个“伪地址”
if 语句生成的汇编是 JNB TF0(0x88.5), Somewhere
0x8D 到 0x88.5 的这一个转换是不是编译器自动完成的?还是需要有什么先决条件?
如果地址0x88已经赋予了助记符TCON,那是不是还可以写成TCON.5?或者TCON^5?
2. unsigned char变量var赋零值 var = 0;
生成的汇编是CLR A以及MOV VAR(地址), A
为什么不直接MOV VAR(地址), #0x00呢?
我查过指令,前者两句的时间和空间开销之和与后者的一句是一样多的,不解。
3. 51 C中嵌入ASM的方法
4. 为什么在语句之后,不能再声明任何变量?
比如
int i=0;
++i;
int j;
就报错,会提示int j;这一句syntax error以及j是undefined identifier
改成
int i=0;
int j;
++i;
就可以,为何?
5. 51 C中的register变量还有什么意义?
有书说没有意义了,因为变量都在RAM,有书说最多两个,超过两个就被当做普通变量。为什么是两个,难道是A和B?
6. 给某个引脚输出一个0/1,这个从物理上看是持续的还是个脉冲?是不是通过某些位可以进行设置?
这一点我正准备啃书,也许过一会儿自己就弄明白了。
未完待续……
另外,各路兄弟姐妹高人菜鸟神仙妖怪如果在这方面也有一些心得的请务必教导一下小弟~ 多谢~ |