c51c语⾔反编译,⾸次接触C51之—HelloWorld反汇编代码解析今天下午在论坛下了⼀个C51单⽚机教程,第⼀个接触到的就是Keil C51环境下如何点亮⼀个LED灯。
代码如下:
HelloWorld Project
#include
sbit Hello=P1^0;                    //;这句我理解:P1=90H 然后和0异或 将结果赋给sbit类型变量Hello
void main()
{
Hello=0;                        //;这句我理解:将Hello赋值为0
}
上⾯注解是我的理解,但我看到半天硬是没看懂。。。书上不是说要将P1的最低位设为0才能达到点亮⼀个LED灯的效果吗?
但我看了半天都没有将P1.0设为0的代码。。。郁闷。。。
后来将HelloWorld Project ⽣成HEX⽂件然后放到反汇编器⾥直接看反汇编代码,代码如下:
Q0000:  LJMP  Q0003                          跳转到Q0003处
Q0003:  MOV  R0,#7FH                      将7FH放到R0寄存器
CLR  A                                  累加寄存器A清0
Q0006:  MOV  @R0,A                        将0放⼊[7FH]地址中
DJNZ  R0,Q0006                    R0减1并跳到Q0006处执⾏(这句和上句就是将0-7FH地址全部清0)
MOV  SP,#07H                      设置堆栈
LJMP  Q000F                          跳到 Q000F处
Q000F:  CLR  P1.0                            P1.0清0
c语言中文网汇编语言看到反汇编代码我才搞明⽩,原来是这样⼀个流程,不知道有⽊有和我⼀样对C代码感到困惑的同学,这下应该可以看明⽩了。
PS:有⽊有朋友告诉下我sbit 类型到底是个什么类型?reg52.h 头⽂件中没看到定义,不知道在那个⽂件中。
有知道的朋友告诉下,3Q。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。