CPU怎么认识代码的?
# 語言這個東西?
首先說明下,我們正常使用的python、C++、C語言等等,我們自己能讀得懂的語言,包括匯編語言,CPU都是不認(rèn)識的,CPU 只認(rèn)識一種語言,那就是 機器語言,也就是我們很多人,或者很多老師,或者很多老鳥,很多大佬都提到的 機器碼。
#機器碼是什么?
機器碼是CPU可以認(rèn)識的,可以按照這個機器碼去執(zhí)行相對應(yīng)指令的代碼,我們可以認(rèn)識它就是一些 十六進制 字符。
比如下面這些,就是機器碼
:200000007592007591007590FFC294C295C29612001ED294D295D29612001E0200097DC8E5 :0B0020007EC87FF8DFFEDEFADDF6226E :00000001FF# CPU上電執(zhí)行程序過程
RAM 和 ROM 是永遠(yuǎn)躲不開的話題,我們編譯成的機器碼最后會燒錄到一個ROM的位置,這個位置保存的東西掉電可保存,這個是基本操作。
然后開機的第一件事,就是把ROM里面的程式,程式是很多臺灣的工程師這樣說明的,我們叫程序,不管叫什么,都是一堆二進制代碼,把這些代碼拷貝到RAM里面,然后CPU就從RAM的指定位置去開始執(zhí)行程序。
很經(jīng)典#什么是匯編代碼?
匯編代碼和機器碼是有對應(yīng)關(guān)系的,所以我們很多時候分析一個C語言代碼的流程,特別是那種未定義行為的時候,我們都反編譯成匯編來看,匯編代碼就代表了CPU的執(zhí)行順序,CPU就是按照匯編代碼來執(zhí)行對應(yīng)的指令的。
如下是51單片機的一段匯編代碼
;流水燈程序P1M0?DATA?092H P1M1?DATA?091H ORG?00H MOV?P1M0,#00000000B MOV?P1M1,#00000000B MOV?P1,#11111111BSTART:CLR?P1.4????????;?置0,CLR?P1.5????????;?置0,CLR?P1.6????????;?置0,LCALL?DELAY?????;?延時0.2sSETB?P1.4???????;?置1,點亮LEDSETB?P1.5???????;?置1,點亮LEDSETB?P1.6???????;?置1,點亮LEDLCALL?DELAY?????;?延時0.2sLJMP?START??????;?進行重新循環(huán) DELAY:MOV?R5,#200??????;?執(zhí)行MOV指令為1個機器周期 D1:MOV?R6,?#200?????;?執(zhí)行的時間為:1*20?個機器周期 D2:MOV?R7,?#248????;?該條指令執(zhí)行了:?1*20*20DJNZ?R7,$???????;?該條指令執(zhí)行了:?2*20*20*248DJNZ?R6,?D2?????;?該條指令執(zhí)行了:?2*20*20?個機器周期DJNZ?R5,?D1?????;?該條指令執(zhí)行了:?2*20RET?????????????;?該條指令執(zhí)行了:?2END#機器代碼和匯編代碼的對應(yīng)關(guān)系
每個CPU都有指令集,這個對應(yīng)關(guān)系也就是指令集的對應(yīng)關(guān)系,例如51單片機的指令集是這樣的。
指令集如果我們使用wave來編寫匯編代碼的話,可以看到匯編代碼和機器碼的對應(yīng)關(guān)系
匯編對應(yīng)機器碼我們隨便解析一個指令
?CLR?P1.4????????;?置0,CLR?P1.5????????;?置0,CLR?P1.6????????;?置0,這三條指令是把 對應(yīng)的GPIO口拉低的,這三條指令對應(yīng)的機器碼是
0009H?C294?CLR?P1.4 000BH?C295?CLR?P1.5 000DH?C296?CLR?P1.6我們看看指令集里面的C2是干嘛的
CLR?bit?直接位清??C2那后面對應(yīng)的 94是什么意思呢?看看這個圖片就明白了,P1口的基地址是90H,P1.4就是偏移 4位,那就是94H了
外設(shè)端口地址#后續(xù)
這篇文章就先講這么多,還有hex和bin文件的關(guān)系,還是有很多東西可以深挖的,后面在講講。
我們知道了CPU的機器指令集,可以修改hex讓CPU按照我們的想法去工作,聽起來還是很酷的。
? 推薦閱讀:
? ??專輯|Linux文章匯總
? ??專輯|程序人生
? ??專輯|C語言
嵌入式Linux
微信掃描二維碼,關(guān)注我的公眾號?
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的CPU怎么认识代码的?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: XSD文件与XML文件有什么关系
- 下一篇: ARM指令集--相关指令的功能