當(dāng)前位置:首頁 > 單片機(jī) > 單片機(jī)
[導(dǎo)讀]當(dāng)前,單片機(jī)種類很多,且實(shí)際工作中僅應(yīng)用一種單片機(jī)也是不現(xiàn)實(shí)的,必得對常用的幾種單片機(jī)有所了解。盡管現(xiàn)在單片機(jī)編程大多使用C語言,但必得對單片機(jī)的內(nèi)核結(jié)構(gòu)、存儲結(jié)構(gòu)及指令集有一定的了解,才有可能寫出優(yōu)秀

當(dāng)前,單片機(jī)種類很多,且實(shí)際工作中僅應(yīng)用一種單片機(jī)也是不現(xiàn)實(shí)的,必得對常用的幾種單片機(jī)有所了解。

盡管現(xiàn)在單片機(jī)編程大多使用C語言,但必得對單片機(jī)的內(nèi)核結(jié)構(gòu)、存儲結(jié)構(gòu)及指令集有一定的了解,才有可能寫出優(yōu)秀的程序代碼。對于單片機(jī)指令的學(xué)習(xí),尋址方式的學(xué)習(xí)是其中的一個(gè)重點(diǎn)和難點(diǎn),尋址方式的正確理解不僅對匯編編程至關(guān)重要,而且有助于對于單片機(jī)內(nèi)核結(jié)構(gòu)(如RISC和CISC的區(qū)別)、存儲結(jié)構(gòu)的更深刻理解。

但是,不同單片機(jī)都提供了一些不同的尋址方式,且即使同樣的尋址方式在不同的單片機(jī)中也有不同的名稱,使得尋址方式顯得混亂,不一致,不易理解。

推薦閱讀:MCS-51單片機(jī)尋址方式總結(jié)

不過,經(jīng)過仔細(xì)的對比、學(xué)習(xí)和分析,我發(fā)現(xiàn),其實(shí)所有的尋址方式,都可以歸為以下六類:

1)立即尋址

2)無址尋址

3)寄存器直接尋址

4)寄存器間接尋址

5)內(nèi)存直接尋址

6)內(nèi)存間接尋址

下面對以上六類指令一一分解:

1、立即尋址,即在指令中直接給出實(shí)際的操作數(shù)數(shù)值,如MOV R1,#0

2、無址尋址,就是說指令中根本沒有給出操作數(shù)或操作數(shù)地址,其原因可能是以下兩者之一:其一,本指令確實(shí)不需要操作數(shù),如NOP指令;其二,本指令本身就是專門為某一個(gè)操作數(shù)制造的,它不可能用來操作其他的操作數(shù),如CLRA指令(由其名稱可知,它用來清零累加器A)。

3、寄存器直接尋址,這是一種十分重要,十分常見,也十分易于理解、易于掌握和應(yīng)用的尋址方式,就是在指令中直接給出寄存器編號(在匯編中,給出的是寄存器的標(biāo)號,也可以視作寄存器的名稱)作為操作數(shù)的尋址方式,而待操作的數(shù)據(jù)就存在此寄存器中。如指令MOV R1,R2就是一條雙操作數(shù)都采用寄存器直接尋址的指令。

另外,這種尋址方式在一些處理器構(gòu)架中又會有一些細(xì)微變化,如在ARM中由于大量使用寄存器直接尋址方式,為了增強(qiáng)此尋址方式的威力,ARM處理器中的寄存器直接尋址加入了移位功能,即在實(shí)際指令執(zhí)行中的數(shù)據(jù)不是簡單的寄存器中直接存儲的數(shù)據(jù),而是此數(shù)據(jù)經(jīng)過移位后得到的數(shù)據(jù)。

4、寄存器間接尋址,如同寄存器直接尋址,都是在指令編碼中給出寄存器編號(在匯編中表現(xiàn)為寄存器名稱);但與寄存器直接尋址不同的是,此處寄存中存儲的并非操作數(shù)本身,而是操作數(shù)在內(nèi)存中的位置,即操作數(shù)的地址(相當(dāng)于C語言中的指針),在內(nèi)存中此地址處存儲的才是真正的操作數(shù)。所以,CPU要獲取此操作數(shù),在微觀上需要進(jìn)行兩次數(shù)據(jù)獲取操作,第一次從寄存器中獲取操作數(shù)的地址,第二此從剛才獲取的地址處在內(nèi)存中獲取真正的操作數(shù)。在多數(shù)處理器中,指令使用寄存器間接尋址比使用寄存器直接尋址運(yùn)行要耗費(fèi)更多的指令周期。如指令 MOV R1,@R2將R1中的數(shù)據(jù)復(fù)制到R2中地址所指向的內(nèi)存中。

寄存器間接尋址是變種最多、擴(kuò)展最多的尋址方式,正因如此,他也是處理器中最為靈活、最為強(qiáng)大、最為難于掌握的尋址方式。不僅不同處理器對它進(jìn)行了不同的擴(kuò)展,而且即使對于完全相同的擴(kuò)展,不同匯編中也可能給出相差極大的書寫格式,這就更加導(dǎo)致了寄存器間接尋址難于理解、難于掌握。

其擴(kuò)展主要有以下形式:1)自增、自減型,@R1++、@R1--、@(--R1)、@(++R1),看到它們的書寫形式大家應(yīng)該也大體明白它們的意思了,當(dāng)然具體的匯編書寫格式那就根據(jù)不同的處理器和匯編器變得五花八門了,比如有的不用@號而用中括號,有的只用一個(gè)加減號而不是兩個(gè),有的只提供了四種變體中的一種或幾種,情況不一而足,但其實(shí)質(zhì)內(nèi)容卻大體一致。2)索引型(或叫偏移型),就是指寄存器中存儲的地址還不是操作數(shù)的最終地址,須得對此地址加一個(gè)數(shù)才是最終的操作數(shù)地址。這種情況就更加復(fù)雜了,其一,書寫格式更加紛亂,如我就見過X(R1)、[R1,X]、(R1+X)等多種形式;其二,偏移量X本身也涉及尋址方式這個(gè)問題,最常用的當(dāng)然是立即尋址和寄存器直接尋址兩種,但也不排除有更加復(fù)雜的寄存器間接尋址這種方式的使用,要是這個(gè)X本身要是也能使用寄存器間接尋址的變種——索引尋址,那可就真是熱鬧了(試想一下,這不就是迭代了嗎)。

5、內(nèi)存直接尋址,就是在指令中直接給出操作數(shù)的地址——存儲于內(nèi)存中的位置,表現(xiàn)在匯編中,為了區(qū)分立即數(shù)和內(nèi)存地址,一般對地址加&或$前綴。如 MOV R1,$100

這個(gè)內(nèi)存地址可以可以分兩種情況給出:其一,直接給出完整的地址;其二,僅給出一個(gè)偏移量,將此偏移量加上PC才能得到操作數(shù)的地址。其中,前者一般叫做絕對尋址,后者一般叫做相對尋址(當(dāng)然,有些匯編中可能并不這樣稱呼),二者很容易理解,也很容易區(qū)分。當(dāng)然,二者也是各有優(yōu)劣:絕對尋址簡化了執(zhí)行電路,因?yàn)樗麩o需進(jìn)行PC和偏移量的加法運(yùn)算;而相對尋址則可精簡編碼長度,從而節(jié)省程序存儲器消耗,當(dāng)然,還有一個(gè)更加重要的好處,那就是可以利用這個(gè)特性編寫“可搬移”的代碼。因?yàn)槭褂孟鄬Φ刂?,那么把程序整段搬移到其他的地址空間去,程序也能夠正確的執(zhí)行而不致出差。

對于同時(shí)提供了絕對尋址和相對尋址的CPU,在其匯編語法層面就需要給出區(qū)別兩種尋址方式的語法,由于不同匯編給出的解決方法不同,這里僅以MSP430編程手冊中給出的匯編語法為例進(jìn)行介紹,以方便理解:

相對尋址:MOV ADDR,R4

絕對尋址:MOV &ADDR,R4

可見,這里是通過一個(gè)“&”符合進(jìn)行絕對尋址和相對尋址的區(qū)分的。

另外,還有一個(gè)不大不小的問題需要注意,很多時(shí)候,使用內(nèi)存直接尋址的匯編中并不直接給出地址數(shù)值,而是給出“標(biāo)號,即label”,匯編器自己把這個(gè)標(biāo)號用實(shí)際的地址值進(jìn)行替代,所以就免除了地址的手工計(jì)算的麻煩。

6、內(nèi)存間接尋址,參考寄存器直接尋址與寄存器間接尋址的異同,我們可以通過上面講到內(nèi)存直接尋址來推測出內(nèi)存間接尋址的內(nèi)容和概念。但是,鑒于在嵌入式處理器和單片機(jī)中一般都不使用內(nèi)存間接尋址方式,所以,這里也就不再展開談了。

另外,應(yīng)該清楚,尋址方式并不是處理器設(shè)計(jì)者想怎么設(shè)計(jì)就怎么設(shè)計(jì)的,它很大程度上是由處理器內(nèi)核結(jié)構(gòu)和存儲結(jié)構(gòu)所決定的。一般來說,立即尋址和無址尋址在所有的處理器或單片機(jī)中都是存在的;而RISC構(gòu)架的處理器中一般大量使用寄存器直接尋址,而寄存器間接尋址和內(nèi)存直接尋址一般只用于加載(LDR)、存儲(STR)指令之中,內(nèi)存間接尋址則在RISC中基本不使用;而對于CISC架構(gòu)的處理器,不僅大量使用寄存器直接尋址,而且大量使用靈活多變的寄存器間接尋址和內(nèi)存直接尋址,甚至于會提供強(qiáng)大的內(nèi)存間接尋址。所以,CISC構(gòu)架處理器的指令一般功能更豐富、更強(qiáng)大,可以用比RISC技術(shù)更少的指令完成相同的功能,但代價(jià)是必須增加更多的地址解析譯碼電路,增加了芯片體積和功耗。

當(dāng)然,我學(xué)單片機(jī)時(shí)間也不長,水平一般,也沒有了解過太多的單片機(jī),只是就自己了解過的ARM、51、AVR、PIC和MSP430做一個(gè)小小總結(jié),希望能幫助初學(xué)者更快的學(xué)習(xí)和理解單片機(jī)指令。但是能力和見識有限,未免以偏概全,所以也希望功力深厚、見識廣博的老前輩能夠指正錯(cuò)誤,或添加其他未提到的尋址方式。當(dāng)然,若是那位有更好的尋址方式歸納總結(jié)方法分享,那將是更好了。

擴(kuò)展閱讀:訪問單片機(jī)各部分使用的尋址方式

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

加利福尼亞州圣克拉拉縣2024年8月30日 /美通社/ -- 數(shù)字化轉(zhuǎn)型技術(shù)解決方案公司Trianz今天宣布,該公司與Amazon Web Services (AWS)簽訂了...

關(guān)鍵字: AWS AN BSP 數(shù)字化

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺與中國電影電視技術(shù)學(xué)會聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉