各位老鐵們,大家好,今天由我來為大家分享匯編語言程序設計基于arm體系結構,以及arm匯編程序100例的相關問題知識,希望對大家有所幫助。如果可以幫助到大家,還望關注收藏下本站,您的支持是我們最大的動力,謝謝大家了哈,下面我們開始吧!
C語言、匯編語言、機器指令、CPU之間是怎么聯系起來的
CPU的全稱是中央處理單元,是計算機進行運算的核心,根據使用的技術不同,CPU又分為X86,X64,ARM、DSP、單片機等不同的體系結構。在每種CPU上都有一套特定的指令集,這就是人們常說的機器指令,直接使用機器指令編寫的程序就是機器語言程序。
理論上來說,是可以通過機器語言直接編寫任何程序的(早期都是直接使用機器語言編程,那時程序相對比較簡單),并且編寫的程序可以直接運行,但是使用機器語言編程對程序員的要求極高,代碼無法移植且不便于人直接閱讀,于是人們發明了一組符號,用來表示這些機器指令,這就是匯編語言。匯編語言編寫的程序計算機無法直接運行,需要一個叫做匯編器的程序轉換為機器語言才可以在特定機器上運行。
而C語言是比匯編語言更高級的語言,使用C語言編寫的程序也是無法在計算機上直接運行的,它需要編譯器將C語言代碼轉換為機器語言,這個過程又分為幾個子步驟,見下圖。
為了使題主的問題更加完善,在這里補充兩個概念,鏈接器與反匯編。
在大型程序中,往往會將任務分解為許多不同的子任務,每個子任務對應一個源文件,在C語言中就是多個C文件,編譯器將每個C文件編譯成一個目標文件(一般在Windows中是obj文件,Linux中是
.o
文件),這些目標文件也是機器指令,但是缺少一些必要的信息,無法直接運行,需要鏈接器將這些文件鏈接起來,再加上一些庫文件與可執行文件頭信息,成為一個可執行文件(Windows是PE格式,Linux是ELF格式)。通常,在查看一個二進制文件時(目標文件或者可行性文件),不會直接顯示機器指令,而是以匯編語言顯示,這是因為此過程中有一個反匯編程序,將機器指令轉換為匯編語言,它的功能剛好與匯編過程相反。
單片機用C語言編程很好學,為什么還要用匯編呢
C語言是發展趨勢,匯編可以幫助學生熟悉單片機內部結構。
首先匯編語言和C語言都是編程語言,匯編是一種機器語言直接面對底層,與單片機底層硬件構架息息相關,相對于C語言,是一門低級語言,C語言面向過程的語言,在編譯執行會轉為匯編在生成單片機可執行文件。是一門高級語言,兩種語言各有優缺點。
一,C語言/匯編優缺點。1學習難度。
匯編因為的理解難度和開發難度比C語言大,所以學習難度大,都是對寄存器操作,學習匯編就要學習這個單片機的硬件結構和基本組成、存儲器訪問方式、單片機I/O操作時序、定時計數器、中斷處理、指令系統、尋址方式等知識點;而且每個系列芯片的內部寄存地址和寄存器都有差異,維護起來也十分困難。
2執行效率
匯編實時性比C語言好,占用單片機資源少,生成的執行文件更小,匯編語言程序直接被轉換成機器指令。而C語言編譯過程會先形成匯編,在轉為機器語言。
3移植性
C語言比匯編移植性好,程序可讀性比匯編要強。實現相同功能,C語言的代碼數量會比較短,對于匯編來說,每一種單片機匯編語言都不一樣。所以移植性差。
C語言通過結構體,指針映射寄存器地址,當有需要時候,只需要簡單更改寄存器地址,或者更改寄存器定義,即可滿足程序和工程的移植。
4,調試
C語言調試方便,例如STM32開發過程中,可以使用jlink通過SWD進行在線仿真,調試各語法,語句執行情況,還可以查看各變量值的變化,很容易就能定位到BUG問題。而匯編調試困難,很多時候難以很快定位問題。
二,單片機開發不一定都能用C語言單片機在上個世紀七十年代開始出現,早期都使用匯編語言進行開發,隨著技術的發展進步,制程工藝快速提升,單片機的處理速度越來越快,很多單片機的開發環境都使用C語言編譯,生產二進制文件。
但因產品BOM成本要求,很多的低端單片機還是OTP一次性燒錄,程序空間小,許多的型號,還是在用匯編進行開發,如義隆,松翰等。
三,學習匯編并不是無用1,大學時學習匯編,有助于理解單片機系統構架,指令集,和寄存器尋址等知識點,也促進對于C語言的指針的用法。
2,目前的linux開發的部分底層bootload文件,或stm32的.s啟動文件就是使用匯編語言的文件,都使用匯編進行底層引導。修改堆棧,或者程序起始運行的位置,都需要在對應文件中修改。或者學習UCOS也會涉及修改啟動文件內相關數據。
四單片機發展趨勢:C語言當前設備半導體的成本,隨著制程工藝的提升而降低,越來越多的低端8位單片機開始從匯編轉向到C語言,單片機也往更高集成度,更強大功能發展。
所以學習單片機不一定要精通匯編,但對匯編有一定了解,對學習單片機有幫助,只有在某一些功能需求時,可以適當運用匯編。
用漢語作為一種全新的編程語言,編寫操作系統和做相應cpu指令集、架構等有多難
確實是很難的,想用漢語作為一種全新的編程語言,編寫操作系統和做相應cpu指令集、架構等,必須對現在的計算機架構,做出顛覆性的變革。
現在計算機架構,自計算機在美國誕生之初,采用的是二進制,計算邏輯、存儲方式、指令編寫等等,到現在都沒有什么改變,只是處理速度大幅提升。
為了更方便計算機的編程學習,從匯編、Basic、Pascal、C、C++、Java、Python等編程語言不斷的發展,但編程的核心思想并沒有太大的變化美國的二進制計算機標準一統全球后,世界上就很少人去做些基礎研究了,包括操作系統、高級語言等。大學的計算機課程:操作系統、計算機結構,還是用二十年前的教材。
不破不立!
想用漢語作為一種全新的編程語言,編寫操作系統和做相應cpu指令集、架構等,可以設想如下研究方向:
1、漢字可以濃縮成200個標準的漢字代碼,再把這些代碼變成一個一個標準的命令集。
2、拋棄二進制架構,采用三進制計算機(前蘇聯有過樣機),對于計算速度大幅提升、存儲空間擴展、增加邏輯判斷選項等有極大的好處,這種架構更適合中文漢字的思考方式。
3、利用漢語的優勢,包括語音識別、神經網絡等優勢,形成有統一、標準、高效、共享的代碼庫。
4、解放程序員的手,通過語音來編程,通過接收語音指令,給出最優代碼模塊,實現所要功能。
5、未來是物聯網、人工智能、神經網絡等萬物互聯的世界,這些對網絡安全的要求非常高,漢字密匙優勢也出超英文。
漢字編程不是不行,需要做更多的基礎研究!
我是漢字谷主,【專注說文解字、識字啟蒙、K12語文教育、海外漢語等漢字產業,古汀漢字谷獨創的《人字學習體系》(人字學習法、快速識字、漢字創新思維、漢字國學、古詩文理解等)】讓小學生也能讀懂國學經典!歡迎關注交流!
匯編語言難學么
在我將近10年的嵌入式編程的實踐過程中,真正使用匯編的地方并不多。
尤其是ARM這樣使用地址空間操作寄存器的方式,大部分代碼都可以用C完成,匯編的技能主要用于:
1、閱讀bootloader代碼:基本上,除了OS的核心部分有匯編代碼以外,bootloader的一部分一般是由匯編代碼完成,能讀懂這些代碼對體系架構的理解和設備啟動的流程都很有幫助。
2、分析問題:現在編譯器優化的很厲害,生成的代碼和C代碼有時很難又嚴格的對應,所以在單步跟蹤某些問題的時候,需要能夠看懂一些匯編語句來分析程序真正執行的流程。
3、性能:大部分時候編譯器的優化已經夠好,我們手寫的匯編的效率未必比他高,但是有些特定的場景,我們可以通過匯編調用CPU的專用硬件指令來進行優化。我對我自己對匯編的要求就是能看懂和分析,不要求能夠編寫復雜的匯編程序。而且匯編大部分是相同的,掌握一種,另一種可以猜個十之八九。
PC端電腦現在為什么不做arm架構,依然堅持X86架構
Pc端電腦現在是有arm架構的,只不過數量非常少,還沒有在消費市場上形成潮流。
所謂的ARM架構還有x86架構,指的都是芯片CPU的架構。那么說到芯片,目前的兩大陣營,英特爾代表了x86,ARM的代表有很多,只說PC端的話,國產芯片有鯤鵬和飛騰。
華為的鯤鵬,現在正在積極的整合資源。在美國對華為進行技術封堵之后,華為可以說是allin鯤鵬,從服務器到pc電腦全面轉向arm架構。
中國電子旗下的飛騰,也是ARM架構芯片的實踐者。借助信創項目,也是在pc領域和服務器領域開疆拓土。
說完芯片,接下來就得說說操作系統了。底層的芯片不會被我們直接所操作,我們是通過操作系統來去操作芯片的。操作系統目前比較流行的,分為兩大類,一個是windows,另一個就是Linux;Windows統治桌面,Linux統治服務器。
但是現在有一個非常重要的問題,就是windows對ARM的支持不太友好,對ARM支持有好的,只有Linux。如果使用Linux操作系統,服務器側還好說,在服務器這一領域,Linux操作系統本來就占據了絕大部分的市場份額。但是在pc電腦側,Windows占據了絕對的主力。Windows環境下的應用和linux環境下的應用是不兼容的,這給Linux在桌面操作系統的生態建設造成了巨大的困難。
在操作系統這個領域,生態就是王,生態就是決定一切的關鍵要素。試想,如果你是一家軟件公司的開發團隊,基于Windows開發了一個桌面應用,如果想兼容Linux,還得重新再開發一遍,你會怎樣?windows在pc桌面上的應用非常多多,全產業生態的程序員都在基于windows環境進行軟件開發,
導致Linux在桌面環境下的應用極度匱乏,這反過來又導致Linux在桌面端的應用推廣愈發困難。最終的結果就是windows一家獨大,連帶著ARM架構在pc端的推廣也是舉步維艱。
一切的一切,都是生態造成的。
關于匯編語言程序設計基于arm體系結構到此分享完畢,希望能幫助到您。