微网站需,佛山网站建设怎样做,提升学历的四种方式,企业网站设计论文# 语言这个东西#xff1f;首先说明下#xff0c;我们正常使用的python、C、C语言等等#xff0c;我们自己能读得懂的语言#xff0c;包括汇编语言#xff0c;CPU都是不认识的#xff0c;CPU 只认识一种语言#xff0c;那就是 机器语言#xff0c;也就是我们很多人首先说明下我们正常使用的python、C、C语言等等我们自己能读得懂的语言包括汇编语言CPU都是不认识的CPU 只认识一种语言那就是 机器语言也就是我们很多人或者很多老师或者很多老鸟很多大佬都提到的 机器码。#机器码是什么机器码是CPU可以认识的可以按照这个机器码去执行相对应指令的代码我们可以认识它就是一些 十六进制 字符。比如下面这些就是机器码:200000007592007591007590FFC294C295C29612001ED294D295D29612001E0200097DC8E5
:0B0020007EC87FF8DFFEDEFADDF6226E
:00000001FF
# CPU上电执行程序过程RAM 和 ROM 是永远躲不开的话题我们编译成的机器码最后会烧录到一个ROM的位置这个位置保存的东西掉电可保存这个是基本操作。然后开机的第一件事就是把ROM里面的程式程式是很多台湾的工程师这样说明的我们叫程序不管叫什么都是一堆二进制代码把这些代码拷贝到RAM里面然后CPU就从RAM的指定位置去开始执行程序。很经典#什么是汇编代码汇编代码和机器码是有对应关系的所以我们很多时候分析一个C语言代码的流程特别是那种未定义行为的时候我们都反编译成汇编来看汇编代码就代表了CPU的执行顺序CPU就是按照汇编代码来执行对应的指令的。如下是51单片机的一段汇编代码;流水灯程序P1M0 DATA 092H
P1M1 DATA 091H
ORG 00H
MOV P1M0,#00000000B
MOV P1M1,#00000000B
MOV P1,#11111111BSTART:CLR P1.4 ; 置0CLR P1.5 ; 置0CLR P1.6 ; 置0LCALL DELAY ; 延时0.2sSETB P1.4 ; 置1点亮LEDSETB P1.5 ; 置1点亮LEDSETB P1.6 ; 置1点亮LEDLCALL DELAY ; 延时0.2sLJMP START ; 进行重新循环
DELAY:MOV R5,#200 ; 执行MOV指令为1个机器周期
D1:MOV R6, #200 ; 执行的时间为1*20 个机器周期
D2:MOV R7, #248 ; 该条指令执行了: 1*20*20DJNZ R7,$ ; 该条指令执行了: 2*20*20*248DJNZ R6, D2 ; 该条指令执行了: 2*20*20 个机器周期DJNZ R5, D1 ; 该条指令执行了: 2*20RET ; 该条指令执行了: 2END
#机器代码和汇编代码的对应关系每个CPU都有指令集这个对应关系也就是指令集的对应关系例如51单片机的指令集是这样的。指令集如果我们使用wave来编写汇编代码的话可以看到汇编代码和机器码的对应关系汇编对应机器码我们随便解析一个指令 CLR P1.4 ; 置0CLR P1.5 ; 置0CLR P1.6 ; 置0
这三条指令是把 对应的GPIO口拉低的这三条指令对应的机器码是0009H C294 CLR P1.4
000BH C295 CLR P1.5
000DH C296 CLR P1.6
我们看看指令集里面的C2是干嘛的CLR bit 直接位清 C2
那后面对应的 94是什么意思呢看看这个图片就明白了P1口的基地址是90HP1.4就是偏移 4位那就是94H了外设端口地址#后续这篇文章就先讲这么多还有hex和bin文件的关系还是有很多东西可以深挖的后面在讲讲。我们知道了CPU的机器指令集可以修改hex让CPU按照我们的想法去工作听起来还是很酷的。 推荐阅读 专辑|Linux文章汇总 专辑|程序人生 专辑|C语言嵌入式Linux微信扫描二维码关注我的公众号