编译过程中的这些情况,你遇到过吗
人们通过按下键盘这一开关输入人们能理解的信息,得到一组有序高低电平(高级语言),再把得到的高低电平通过电路逻辑转化为指令集需要的另一组高低电平(机器语言),这就是编译过程
顺带一提。今年自己录制了一套免费系统的入门单片机教程还有几百套学生的毕设资料,想要私信我就可以,也可以找我报名线上指导,去参加电子设计比赛。。
编译只是编码的转换。
举例来说,高级语言写一行if(a==b),编译器如何处理呢?
首先,它要分析这一行文本,识别出它是个if语句。
然后,它要调用相应的机器码,完成“比较a和b是否一致,然后跳转到合适逻辑分支”这个动作。
但,这个东西并不被机器码直接支持。怎么办呢?编译器会自动组合一串指令:
1、计算a是否等于b(根据数据类型,这个操作可能还是完全不一样的。常见的整数可以直接执行xor操作,全零就是相同;但字符串就是另一回事了。而且字符型整数和4字节8字节整型需要执行的指令还是各不相同的)
2、使用jz/jnz(寄存器内容为0跳/非零跳)指令跳转到合适分支
3、继续顺序执行
这个从高级语言文本到机器码的转换过程,就是所谓的“编译”。
当然,我在上面用了“助记符”(汇编指令);实际上,jz可能是十六进制的0x1234,而jnz则是0x1235……
这个数字在内存/寄存器中,被存储为高高低低的一堆电平;然后这个电平再去激活合适的处理电路/处理流程——这个您就非常熟悉了。
当然,实际操作中,这些还可能更为复杂。比如说,文本输入时,计算机应该处于“编辑模式”,编辑完才通过一个命令存档;然后再在“命令模式”敲一个命令,启动编译程序;编译程序根据输入参数,读入你刚刚编辑的文本数据、把它编译成机器码存盘。
如果继续深入下去,还有程序载入、控制权转移等等细节。不过大致思路就是这些,只需照类似规律细化即可。
最后
特别分享一些入门单片机教程,私信我就可以~或者全网同名:华维单片机编程