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小时内删除。
发表评论