最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

51單片機進(jìn)階開發(fā)(二)之單片機底層邏輯

2022-09-11 00:28 作者:落木青云  | 我要投稿

單片機底層是怎么運行的

今日正值中秋,這個點上月吃餅任務(wù)都完成了吧,當(dāng)然還是要跟大家說一聲中秋節(jié)快樂!

今天趁著過節(jié)給大家送點知識福利,接下來的內(nèi)容可能比較難懂,我也嘗試盡力讓它的難度低于你在學(xué)校課堂學(xué)習(xí)的難度。如果跟著我的介紹一步步看明白了,那真的恭喜你,很棒,也很幸運。以后你對計算機會有新的認(rèn)識,未來不管是學(xué)習(xí)其他編程語言或接觸其他更復(fù)雜的芯片都會簡單很多。究竟怎么樣接著看完試試吧!

在我前面寫的單片機教程系列文章里基本都是以應(yīng)用為主,對它的執(zhí)行機制說的比較少,最多就是介紹了相關(guān)寄存器怎么用。主要是希望通過實驗現(xiàn)象讓大家了解單片機這玩意可以做什么,怎么控制。在最開始例舉的幾個仿真實驗程序中我還特意留了一些坑,結(jié)果只有少數(shù)人發(fā)現(xiàn)并私信我了,大多數(shù)人應(yīng)該沒嘗試,或許是我寫的例子過于簡單都不值得一讀吧,哈哈,總之還是那句話學(xué)技能還是要多動手練習(xí)的。

大家伙都是學(xué)單片機的人,想必也都接觸過《微機原理》了吧,也不知道大家感覺它難不難學(xué),可能提到它多少人還是有陰影的吧。很不巧單片機其實就是簡化版的微機芯片,它們的底層機制是相似的,《微機原理》學(xué)得好的朋友相信他們學(xué)單片機肯定沒有任何問題。還記得《微機原理》都講了哪些內(nèi)容不?不記得的話現(xiàn)在我?guī)е蠹乙黄饋砘貞浺幌掳?。簡單說它就是讓我們使用匯編語言編程的吧,說到匯編肯定很多人就不敢往下看了,沒錯,今天我要講的內(nèi)容就是匯編,現(xiàn)在選擇不看還可以反悔,不然接下來你就真得跟著我學(xué)匯編了。

匯編可以說是編程語言的鼻祖,說句不好聽的話程序員不知道一些匯編知識還真算不上是真正意義上的程序員。匯編語言是舉例機器語言最近的編程語言,各種控制芯片的底層執(zhí)行原理就是一堆機器代碼在控制著一堆邏輯器件。他們是怎么運作的呢?接下來我將以51單片機為例來嘗試將它們關(guān)系理順,讓你喜歡上編程這種有趣的工作。

還是從微機原理講起

為啥要從《微機原理》說起呢?因為它是一本純粹講解計算機底層系統(tǒng)的的基礎(chǔ)書籍,很多有關(guān)計算機原始設(shè)計的知識都可以在這里找到答案,所以建議大家如果對計算機系統(tǒng)不太熟悉應(yīng)該多看幾遍,有些東西看著看著就會了。當(dāng)你愿意靜下心來看書籍的時候某些書本上沒有的答案你才會主動去尋求解答,我覺得這才是真正有意義的大學(xué)學(xué)習(xí)過程。其實我們的大學(xué)教材很多是不完整的,特別是基礎(chǔ)性知識,可能在注解或文后參考文獻(xiàn)才會有些提示。有些知識點你就不可能在教材上找得到答案,而是要去圖書館或者官方手冊或網(wǎng)站查詢才能獲得解釋。

我并不是說編寫教材的人水平有問題或做的不對,恰恰相反,能作為高校教材的經(jīng)典的書籍,編者的水平在國內(nèi)絕對是該領(lǐng)域有名的專家。他們出書安排的本意也是希望學(xué)生能夠自主學(xué)習(xí),多去了解,拓展知識,畢竟教材的厚度有限,知識日新月異,涉及的幾乎無限。大學(xué)本應(yīng)該是一個自主求學(xué)的地方,那些老教授他們當(dāng)初是在基礎(chǔ)條件匱乏的環(huán)境中突破一層層障礙成長起來的,寫教材也肯定用心良苦。

只是他們的教材傳到學(xué)生手里就變成一部分人要依賴?yán)蠋焺澲攸c才能及格的境地,這種情況持續(xù)時間長了,就總會有些是原來學(xué)的馬馬虎虎的學(xué)生來學(xué)校當(dāng)老師了,本來自己沒整明白,學(xué)生似乎也不太想整明白,到最后教的內(nèi)容就只能照著書本找答案了。當(dāng)然肯定不是所有老師都這樣,在教學(xué)的過程中很多年輕老師還是隨著資歷提升授課水平也不斷提升,前面的少數(shù)代表不了整體,所幸我在大學(xué)遇到的老師都挺好,只怪自己當(dāng)初不給力,沒能得到真?zhèn)?,今天剛好又是教師?jié),祝福天下老師節(jié)日快樂!

linux之父linus在大學(xué)期間設(shè)計出了第一版linux系統(tǒng),我只能說他真是天才般的存在,那時的條件與我們所處環(huán)境相比,幾乎一個人完完整整設(shè)計出了一整套系統(tǒng),所需腦力何其巨大!在校時我還專門讀過他的源碼,即便一共只有萬把行代碼,很多都難以理解的,看了這頁忘了那頁都是常事,最后也沒領(lǐng)會它的真諦,沒過多久就忘得差不多了,現(xiàn)在若有人叫我去看他的源碼,我會直截告訴他,算了吧,我真不是那塊料,我還是干好我的本分事吧。有興趣的朋友可以去看看他的代碼,但是不建議初學(xué)者看,至少能熟練運用C語言,有匯編基礎(chǔ)才能看,否則對你學(xué)習(xí)百害無一利!

《微機原理》這門課程中主要是以英特爾的80x86芯片介紹來計算機的底層原理,一般情況下,計算機,電子相關(guān)專業(yè)的同學(xué)在完成計算機基礎(chǔ)和C語言(或其他某高級語言)的學(xué)習(xí)之后,就會從微觀方面來學(xué)習(xí)計算機系統(tǒng)?!段C原理》中就會介紹計算機的數(shù)制、編碼,CPU的由來,以及內(nèi)部功能結(jié)構(gòu),然后就引出了80x86芯片,這些內(nèi)容結(jié)合已學(xué)的知識多數(shù)人都應(yīng)該容易理解。

圖片

上面這個圖很眼熟吧,51單片機也有類似結(jié)構(gòu),接著課本就進(jìn)入到了80x86指令系統(tǒng)的介紹,覺得《微機原理》很難的同學(xué)應(yīng)該就是從這開始迷茫的吧,什么立即尋址,直接尋址,寄存器間接尋址,基址變址尋址等等一大堆讓人頭疼的概念。外加各種指令,操作符,又是地址,又是內(nèi)存,又是寄存器,存儲單元的,這些看這都夠眼花繚亂了,老師還叫你背下來說期末要填空,不是要了老命嗎,對不對?練習(xí)題里給你一段代碼然后給出如下圖這樣的示意圖,問你能不能整明白啥是啥,啥等于啥?這能不暈?老師都能給你真暈。

圖片

看了上面的舉例看暈的沒?如果看暈了那我的目的就達(dá)到了,接下來我接給你整明白它。

匯編語言怎么對應(yīng)機器語言

上面說了這么多匯編語言相關(guān)的內(nèi)容越說越迷糊了,要解決疑惑,首先來認(rèn)識一下維基百科對匯編語言的定義。

匯編語言(英語:assembly language:匯編語言)是任何一種用于電子計算機、微處理器、微控制器,或其他可編程器件的低級語言。在不同的設(shè)備中,匯編語言對應(yīng)著不同的機器語言指令集。一種匯編語言專用于某種計算機系統(tǒng)結(jié)構(gòu),而不像許多高級語言,可以在不同系統(tǒng)平臺之間移植。

從定義可以知道的信息是:匯編可以存在于任何一種帶控制功能的芯片中,但每種控制芯片支持的匯編語言不一定一樣!為什么會這樣呢?芯片廠商設(shè)計一款芯片定義它的邏輯功能的同時肯定就定義好了它的操作指令,所以現(xiàn)在我們會聽到有各種架構(gòu)的芯片存在,每一種架構(gòu)實際都是一套指令系統(tǒng),比如80x86,MIPS32,8051,AVR,RISC-V等等各種指令集,芯片廠商可以提供匯編指令集給使用者,但使用者也可以自己定義匯編指令,當(dāng)然這些使用者都是大廠啦,我們這些普通用戶就直接用廠商提供的就足夠了,像微機原理和51單片機的匯編指令都是Intel自己定義好給我們的。這也就是我們之前說的匯編語言的局限性,不方便移植,今天我們就不追究這些了。

好了,再看后面一句標(biāo)紅的文字,意思就是每種芯片的匯編語言都對應(yīng)器上面的機器語言的指令,這句話才是我們搞清楚匯編語言的與機器語言關(guān)系的關(guān)鍵所在。簡單的說就是我們寫的每一句有實際意義的匯編語句它就對應(yīng)一個機器碼,也就會對應(yīng)一個機器指令,CPU就根據(jù)這些連串的機器碼執(zhí)行一系列的機器操作,這就是我們寫的程序執(zhí)行結(jié)果。先記住這句好,具體的對應(yīng)關(guān)系看后文一一介紹。那什么是有意義的匯編語句呢?他們就是匯編語言指令,也就是你不樂意記的mov,add,inc,jmp等等,那么對應(yīng)的就有一些無實際意義的匯編語句,我們所說的匯編偽指令就是了,比如db,dw,equ等等,這些語句一般用來定義變量,或做指示,標(biāo)識用,是起輔助作用不參與程序運行。

我們都知道,我們的51單片機是8位機,所以它內(nèi)部的操作碼就有8bit,也就是說它內(nèi)部最多可以有2^8=256個操作碼。現(xiàn)在匯編指令確定了,操作碼總數(shù)確定了,剩下的就是一個蘿卜一個坑式的填充它們之間的對應(yīng)表了吧。

那究竟這二者之間的怎么對應(yīng)的呢?

我們可以查看一些芯片的官方手冊,專業(yè)一點的廠商都會列出這些信息,有些書籍上也會有,但一般再附錄中出現(xiàn),并且內(nèi)容不會很詳細(xì),所以平時查看還是以官方手冊為準(zhǔn)。我這里貼幾個圖展示說明一下。

圖片

這是STC數(shù)據(jù)手冊中的指令集說明,信息是挺多的,但我們似乎還是找不到這些對應(yīng)關(guān)系,但是我們可以看到這里列出了每個匯編指令結(jié)合各種尋找方式,那機器碼應(yīng)該與這些有關(guān)吧。接下來我們繼續(xù)找資料挖掘:

圖片

可以看到,這里發(fā)現(xiàn)了代碼二字,看來離目標(biāo)越來越近了,我們是不是應(yīng)該多看看英文資料呢?

圖片

果然還是能找到信息,現(xiàn)在這個表就把他們關(guān)系都對應(yīng)上了吧!有些人可能還是看不懂這個表究竟怎么讀,舉個例子,nop指令,位于第0行第0列,組合來它對應(yīng)的機器碼值就是0x00,同樣的,ajmp指令位于第0行第1列,組合碼就是0x01??疵靼琢税桑褪且粋€二維數(shù)組。每個指令的各種尋址操作都在其中一一展現(xiàn),根據(jù)前面手冊中的信息就可以得到完整的對應(yīng)表了。這么看這個表還正有點容易犯迷糊。我們可以再做得簡單易懂一些。

圖片

看這個表就簡單多了吧,當(dāng)然這里例舉的只是部分表格內(nèi)容,詳細(xì)表格內(nèi)容不較多,不好全截圖,現(xiàn)在這些資料沒有整理到云盤,后面再找個時間統(tǒng)一處理一下,分析鏈接出來,近期需要這些資料的朋友可以私信或留言,我直接發(fā)文件。

現(xiàn)在我再來舉個例子來說明一下,大家應(yīng)該就可以更好的理解它們。

圖片

現(xiàn)在看到這條個圖你會怎么想?你是不是首先想到去看mov指令的規(guī)則?解釋這句代碼的意思,這傻子都知道的吧。今天看了這篇文章你應(yīng)該還需要知道的是看到右邊rom中的數(shù)據(jù)就能得出左邊的匯編語句,這層關(guān)系想明白了嗎?看懂了我在接著說后面的內(nèi)容。

C語言怎么對應(yīng)上匯編語言

請聽下回分享

匯編語言怎么和機器語言對應(yīng)

請聽下回分享

結(jié)語:

由于內(nèi)容比較難理解,今天先講解前半部分內(nèi)容,后半部分擇日再解讀,其實這其中會涉及到編譯器,鏈接器,解釋器,程序文件等相關(guān)知識,內(nèi)容比較多,就沒具體說明,以后的文章中遇到了再做解釋說明。后半部分內(nèi)容用視頻演示說明會更好理解一些,所以下回做好了一起分享給大家。晚安,拜拜!

51單片機進(jìn)階開發(fā)(二)之單片機底層邏輯的評論 (共 條)

分享到微博請遵守國家法律
安新县| 长海县| 五常市| 昭觉县| 额尔古纳市| 九龙县| 沁源县| 肥西县| 镇江市| 陇南市| 和顺县| 乌兰县| 高雄市| 巴中市| 香港| 蒙城县| 正宁县| 得荣县| 阿拉善右旗| 彰武县| 阜新市| 南木林县| 遵义市| 莒南县| 乾安县| 光山县| 黄梅县| 得荣县| 光泽县| 威远县| 梓潼县| 台中市| 松潘县| 买车| 丁青县| 临沧市| 巨野县| 灌阳县| 新干县| 涪陵区| 丹棱县|