1樓:法琳
彙編和isa指令集應該是對映關係,莫得優化了。isa往下就是積體電路了,涉及流水線rob way set associated cache啥的,GPU還有更多亂七八糟的cache和pipeline。不寫韌體不用關心isa以下額了
2樓:Blame
按照上述的說法,如果乙個程式檔案是純二進位制指令的,上面都是有效指令,那它必然不需要作業系統也能執行,參見微控制器這類無作業系統的環境。
作業系統下編譯器編譯出的並不是純粹的單純由二進位制指令構成的程式,而是包含有各種說明資訊的檔案,參見elf格式或者pe格式。作業系統有專門的引導程式,會解析這個檔案,然後為它劃分記憶體,然後把cpu指向這個程式的可執行部分。
先有了彙編,再有的作業系統。對於一些系統來說,作業系統並不是必需品。
3樓:不凋花
以下內容僅用於簡單地向題主解釋,文中的不嚴謹的說法,意會即可別太較真:
首先,計算機能執行是因為有電。
電線按不同的規律連線在一起,就有了門,比如與非門、或非門。
這些門就可以表達出來各種邏輯,進行一些簡單的運算。
按照更複雜了規律連線在一起,就有了觸發器。
有了這些觸發器就可以表達出來更複雜的邏輯,進行更複雜的運算。
有了這些門和觸發器,就能設計出來暫存器,臨時地進行一些儲存。
於是,就有了CPU。
但是,請記住本質仍然是電路。
這些電子元件有很多的引腳,可以大致理解為,電路從一部分引腳流入,從另一部分引腳流出。
所有輸入的不同會導致輸出的不同,而這些輸入與輸出的關係是由其內部的電路決定的。
所以,人們首先可以設計出一套規則,就是輸入與輸出的對應規則,也就有了指令集。
然後設計一套電路,用於實現這套規則,也就是CPU。
人們向它的一部分引腳輸入電流,然後從另一部分獲取輸出。
如何快捷地輸入電流?用打了孔的紙帶。
這些紙帶上的孔描述的就是機器語言,就是由指令集衍生出的程式。
但是打孔太麻煩了怎麼辦?能不能用文字描述高低電平?
人們設計了組合語言,用鍵盤輸入字元,用彙編器編譯為機器碼。
組合語言需要鍵盤和彙編器,人們就設計了鍵盤和彙編器。
有了鍵盤,怎麼和 CPU 建立聯絡?需要一些程式來控制和訪問裝置。
這些程式怎麼來的?硬著頭皮用紙帶打孔,乙個孔乙個孔地打出來的。
然後再乙個孔乙個孔地,將彙編器給寫出來,建立起來助機符同機器碼之間的對映。
有了鍵盤和彙編器,人們終於可以用字元描述程式了。
那麼,計算機僅有 CPU、記憶體、鍵盤,就已經足夠了嗎?不夠。
人類有眼睛,所以需要顯示器;人類有耳朵,所以需要音響。
瞧瞧現在都有多少東西了?CPU、記憶體、鍵盤、顯示器、音響。
這就夠了嗎?
能不能擁有更多的顯示器?能不能擁有更多的音響?
能不能擁有各種方便的外設?
以及最重要的,能不能別只有批處理系統?人們希望計算機能有互動能力。
後來的事大家都知道了,關於 Unix 和 C 語言的那段故事,或者說,是一段傳奇。
傳奇的不在於 Unix 的設計者們成功了什麼,或者失敗了什麼。
而是人類擁有了乙個,除彙編之外,廣泛使用至今的高階程式語言—— C 語言。
彙編和機器碼之間,可以認為是一種對映,但是 Unix 和 C 所帶來的,是一種抽象。
以遠比組合語言要貼近自然語言的 C 語言描述這些邏輯,是一種巨大的進步。
以作業系統來抽象硬體裝置,也是一種巨大的進步(注:我的意思當然不是說在 Unix 之前沒有別的系統)。
這種抽象的思維,是非常重要的。
硬體裝置的指令集、作業系統的系統呼叫、虛擬機器的底層呼叫,這是一種抽象的過程。
抽象、對映,一層一層地壘上去,才有了現在與未來。
既然高階語言可以通過編譯器翻譯程組合語言為什麼要學組合語言?
財富思維 組合語言是高階語言的底層,高階語言是汽車維修技術,那麼組合語言就是汽車製造技術。懂得了汽車的製造方法,那麼維修時檢查故障就更容易。 zhangxiaoyang 樓主可能是在校大學生。從計算機學科的基礎素養來看,是需要的,包括計算機組成原理 編譯原理 作業系統 高等數學等等。從找工作的角度來...
高階語言如何轉組合語言的問題?
卡卡超人 其實你問的這些問題你自己寫一遍然後看彙編就可以了1.直接把資料段對映到記憶體,編譯器已經把初始值寫到了資料段。不過類的還要在main前執行下建構函式,這個編譯器不能幫你。2.區域性變數宣告是通過sub esp在棧上預留空間,如果有初始化當然是mov,不初始化就什麼也不幹,變數值是隨機的。3...
如何學好微控制器(組合語言)不掛科 ?
巧學.h 雖然組合語言由於其複雜性使得其適用領域逐步減小,但這並不意味著彙編已無用武之地。由於彙編更接近機器語言,能夠直接對硬體進行操作,生成的程式與其他的語言相比具有更高的執行速度,占用更小的記憶體,因此在一些對於時效性要求很高的程式 許多大型程式的核心模組以及工業控制方面大量應用。此外,雖然有眾...