要说这个计算机硬件,它能直接听懂啥指令,这事儿我可算是亲自踩过坑,折腾明白的。
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址:www.gm89.icu
刚开始学编程那会儿,我跟很多新手一样,老觉得电脑怎么就能听懂我写的那些个英文字母、符号?明明我写的是“print”或者“if else”,它就能知道要干嘛简直是神了。那时候,我学的都是什么Python,C++,高级语言写起来是方便,可心里总有个疙瘩,电脑内部到底咋运行的?真的就这么智能吗?
后来我辞职不干了,正好那段日子闲在家里,就想着给自己找点事做。家里有个特老旧的开发板,是个那种8位的单片机,屏幕都没有,就几个LED灯和几个按钮。我寻思着,既然电脑能直接执行,那这小玩意儿肯定也能。我就想试试,看看能不能不用高级语言,直接跟它“对话”。
我当时的想法挺单纯的,就觉得既然能直接执行,那肯定就是一些简单的“口令”呗。上网查,找资料,好不容易才找到那块老单片机的芯片手册。打开一看,密密麻麻的英文,全是些什么“MOV”、“ADD”、“JMP”之类的指令。更头疼的是,每条指令后面还跟着一串十六进制的数字,比如“MOV A, #30H”对应的是“7430”。我当时就懵了,这都是什么玩意儿?
硬着头皮,我决定从最简单的开始。我想让那个LED灯亮起来。按照手册上说的,某个特定的内存地址写入一个值,灯就能亮。于是我照着那个说明,先把电脑上的高级语言编程环境关了,直接打开了一个叫“汇编器”的软件。这玩意儿可把我折腾惨了。
我得先写几行汇编指令,比如先初始化一下某个端口,再把一个“1”送进去让灯亮。写完了,保存成一个文件,然后用一个烧录工具,通过串口线把这个文件“灌”到单片机里。这中间一步出错了都得重来,不是烧录失败,就是LED灯根本不亮。我记得有一次,我为了让一个灯闪烁,得先写指令让它亮,然后延时,再写指令让它灭,再延时,循环往复。光是写那个延时程序,我就写了半天,因为每次延时都得算好循环多少次,才能达到我想要的效果。
那些高级语言里一个“delay(1000)”就能搞定的事,在汇编里我得这么写:
MOV R0, #250(把250放到寄存器R0里)DLOOP: DJNZ R0, DLOOP(R0减1,如果R0不为0就跳回DLOOP继续减,直到R0为0)RET(返回)
这还只是一小段延时,我得调好几个寄存器,嵌套好几层循环才能实现比较长的延时。每写一行,我都要对照芯片手册看看这个指令对应的机器码是我发现,我写的每一条汇编指令,都一一对应着一串固定的十六进制数字。比如“MOV A, #01H”可能对应的是“7401”。
折腾了大概有一个多星期,我终于看到了希望。那个小小的LED灯,在我烧录完程序后,真的按照我设定好的频率闪烁起来了!那一刻的成就感,比我用Python写一个复杂程序还要强烈。因为我清楚地知道,我写下去的指令,直接通过那个烧录工具,变成了单片机能直接理解的“二进制代码”,也就是一大堆“0”和“1”的组合。单片机里的CPU,就是直接读取这些“0”和“1”,然后根据这些电信号去控制电路,最终让LED灯亮灭的。
我这才彻底明白了,计算机硬件,无论是大电脑还是小单片机,它能直接执行的,压根儿不是我们看到的高级语言,也不是那些“MOV”、“ADD”的汇编指令,它直接能读懂的,只有一种东西,那就是由电信号组成的机器码,也就是我们常说的二进制代码。我们平时写的任何高级语言,都得先通过编译器或者解释器,层层翻译,最终变成这种硬件能直接“听懂”的机器码,才能被CPU去执行。
从那以后,我再看什么编程语言,再看什么操作系统,都觉得通透多了。知道硬件的底层逻辑,就好像把电脑的“黑盒子”给打开了,里面的秘密一下子清晰可见。对于咱们新手来说,搞懂这个基础,真的能帮助我们更深入地理解计算机到底是怎么工作的,也更容易把各种编程知识融会贯通。