『壹』 編譯器為什麼會生成匯編語言而不是機器語言
計算機只能識別二進制代碼,所以機器指令是由二進制代碼組成的,即你所說的機器語言。所謂匯編語言,只是一種符號,用來方便人們使用,否則你看到的都是一串串的01011011之類的信息,一眼就認出它是什麼指令非常困難,而用匯編語言這種符號,一看就知道是什麼指令了。這種符號語言用助記符來表示操作碼,用符號或符號地址來表示操作數或數地址,它與機器指令是一一對應的。(樓上各位表述的所謂「步驟」論是不確切的)
所以,並不是你說的「生成匯編語言而不是機器語言」,生成的是機器語言,你在調試器或反匯編程序中看到的匯編語言代碼只是由反匯編程序把機器指令翻譯成你看得懂的符號--匯編語言--而已。(比如你在OD或IDA中可以看到每行匯編指令前面都有機器碼,如push ebp的機器碼是55h,單看55,你不是熟手的話可能還不知道它是什麼指令,後面給你顯示出符號"push ebp",你一下子就明白了,這就是一一對應的關系,連"55"都是為了讓你看的方便,否則應是01010101,即8個電子元件的電源開、關狀態)
同樣的道理,你在十六進制編輯器(如winhex、HexWorkShop等軟體)中看到的是十六進制每行16位元組排列的,那也是經過把二進制代碼每位元組轉換成十六進制顯示給你看的。
關於平台問題,當然會有影響,不同的CPU有不同的指令系統,就連同一廠家的CPU指令系統都不同,比如Intel公司的CPU,從最早的到現在的,指令不斷增多,什麼MMX、SSE等等新指令集不斷出現,更不要說不同廠家的CPU了。當然它們之間也有很多兼容的指令集。
『貳』 關於匯編和c語言效率哪個高
這個不一定,取決於編程人員的水平,
實現相同功能:
一般來說,如果牛人來寫匯編和C語言,肯定匯編性能高。
但如果一般開發人員寫匯編和C語言,就不一定了,
因為現代編譯器有大量的優化手段(超牛人寫的,比如寄存器優化,亂序優化,位元組對齊優化等等,很多優化技術一般開發人員是不了解的),這些優化手段最終得到的效果,可能比一般人直接用匯編寫的性能更高。
『叄』 正常編寫的c語言程序編譯器會自動進行針對特定指令集用匯編語言優化嗎
這個要看你使用什麼編譯器了。查看編譯器的幫助文檔,它會告訴你它支持那些指令集,並且做哪些可能的優化。
不同的編譯器,是不一樣的。
補充:GCC 不太清楚,你連VC++的版本都不說。汗,VC6是不支持SSE的,需要安裝VC6SP5。
VS2005 和 VS2008 都支持 SSE。對 SSE/MMX 指令集優化得最好的,還是 Intel 的 c++ 編譯器。
對並行和高性能計算,Fortran 的優勢比較大。特別是 Fortran2003 的新特徵,為並行計算做了很多專門的設定。Intel 也有 Fortran 的編譯器。
『肆』 同樣需要編譯器為什麼匯編語言比較快
絕大多數情況下,並不是。
事實上除了對CPU工作模式極端熟悉的人,一般人是很難用匯編寫出更高效的代碼的。
編譯器雖然智商比不了人,但是它更精通優化。生成高效的代碼需要透徹地掌握硬體的工作模式,每個細節都要考慮清楚。而且這很大程度上是軟體更擅長但人並不擅長的繁重無腦又要求極高精確性的機械化工作。
當然專業搞優化的人還是能打敗編譯器的,因為編譯器能做到的人終究還是可以做到。而人要比編譯器聰明得多。編譯器只能遵循一些規定好的模式進行優化,人可以創造編譯器根本不知道的優化方法。某些邏輯靠編譯器是沒辦法生成出來的,只能由人直接用匯編寫。匯編語言雖然也要編譯,但是一般會和機器指令直接對應,相當於要求CPU在細節上嚴格按人的思路工作,而高級語言並不能控制太多細節。
『伍』 用c語言寫程序時,還可以用匯編語言嗎
可以像樓上一樣用特定編譯器支持的asm、__asm一類關鍵字內嵌匯編,也可以讓編譯器編譯時輸出匯編代碼,然後再在上面進行改動,最後一並轉成機器碼。要用哪種方法還是看需要而定,如果是實現一個特定模塊,可以內嵌;如果是要做代碼調整,用後一種。
不過話說回來,在現代編譯器把優化已經做得很好的情況下,用C這么底層的語言已經很少用得到匯編了。
『陸』 匯編語言在當今的應用性是否可以被C語言完全取代
1.語言很難被取代的,使用哪種語言是要看環境的,像設計硬體的或者對效率要求高的話,你必然還是會選匯編,如果對移植比較重視,必然選C,匯編畢竟局限性很大,至於學不學看你自己,個人建議學,你不可能停留在應用層的開發,總要深入平台的,而匯編無疑是把厲劍
2.學匯編和學別的語言沒什麼大的語言,耐心很重要,興趣要培養,多思多練,不要被書禁錮了思想,學前可以了解下你所要工作的平台硬體相關的信息,一般都是linux操作系統和ARM所以在學期,不妨花點時間了解下硬體和系統的基本知識
『柒』 匯編語言有什麼特點
1、機器相關性
這是一種面向機器的低級語言,通常是為特定的計算機或系列計算機專門設計的。因為是機器指令的符號化表示,故不同的機器就有不同的匯編語言。使用匯編語言能面向機器並較好地發揮機器的特性,得到質量較高的程序。
2、高速度和高效率
匯編語言保持了機器語言的優點,具有直接和簡捷的特點,可有效地訪問、控制計算機的各種硬體設備,如磁碟、存儲器、CPU、I/O埠等,且佔用內存少,執行速度快,是高效的程序設計語言。
3、編寫和調試的復雜性
由於是直接控制硬體,且簡單的任務也需要很多匯編語言語句,因此在進行程序設計時必須面面俱到,需要考慮到一切可能的問題,合理調配和使用各種軟、硬體資源。這樣,就不可避免地加重了程序員的負擔。與此相同,在程序調試時,一旦程序的運行出了問題,就很難發現。
(7)匯編語言能被編譯器優化嗎擴展閱讀
匯編語言的發展歷程:
說到匯編語言的產生,首先要講一下機器語言。機器語言是機器指令的集合。機器指令展開來講就是一台機器可以正確執行的命令。電子計算機的機器指令是一列二進制數字。計算機將之轉變為一列高低電平,以使計算機的電子器件受到驅動,進行運算。
上面所說的計算機指的是可以執行機器指令,進行運算的機器。這是早期計算機的概念。在我們常用的PC機中,有一個晶元來完成上面所說的計算機的功能。這個晶元就是我們常說的CPU(Central Processing Unit,中央處理單元)。
每一種微處理器,由於硬體設計和內部結構的不同,就需要用不同的電平脈沖來控制,使它工作。所以每一種微處理器都有自己的機器指令集,也就是機器語言。
早期的程序設計均使用機器語言。程序員們將用0, 1數字編成的程序代碼打在紙帶或卡片上,1打孔,0不打孔,再將程序通過紙帶機或卡片機輸入計算機,進行運算。這樣的機器語言由純粹的0和1構成,十分復雜,不方便閱讀和修改,也容易產生錯誤。
程序員們很快就發現了使用機器語言帶來的麻煩,它們難於辨別和記憶,給整個產業的發展帶來了障礙,於是匯編語言產生了。