在大學,我參加了計算機體系結構和彙編語言程序設計必修課程。我發現彙編語言非常耗時且很難掌握。我仍然無法理解彙編語言教授的原因。我問了我的老師的同樣問題,他笑了,說你將來會知道的。但是,我有一種本性,我不能等待那麼長時間的答案,一旦一個問題挑逗我的思想。所以我想問,爲什麼我們仍然需要彙編語言,如果有非常強大,快速和高效的編程語言,並且除此之外,這些語言提供了多種工具來使編程變得簡單。所以爲什麼?如果我們的高級語言提供複雜的工具,爲什麼仍然需要彙編語言?
5
A
回答
5
關鍵任務仍然需要機器碼,例如,
- 硬件的特定代碼,如設備驅動程序
- 嵌入式設備,其中,所述代碼的大小是重要
- 低電平碼在性能是關鍵的 等
通常,彙編語言可以混合到更高級別的語言中,例如C,其中彙編可以內聯添加到C代碼中。
也就是說,即使您將使用高級語言進行編程,掌握底層硬件體系結構仍然是一個好主意,因爲它可以讓您深入瞭解堆棧,堆,指針等是如何工作的。
11
一個相當好的理由是所有的編程語言都是計算機工作原理的抽象。理論上講,對於高級語言來說,抽象意味着程序員不必擔心計算機的細節。
但是abstraction is always leaky,例如,大多數(如果不是全部的話)高級語言不能自動優化CPU緩存(例如緩存一致性和錯誤共享),並且高效的多線程總是很棘手。這意味着如果性能至關重要,程序員可能需要以不同的方式編寫代碼。
獲得性能的最佳方法是瞭解機器如何工作,以便程序員可以進行大型體系結構轉換,而編譯器不能輕鬆完成。例如,確保線程以64字節的倍數處理數據(以減少高速緩存線上的錯誤共享),或者執行結構數組轉換的數組結構。
大會(和C在一定程度上)是學習這些性能細節的一個很好的方式,因爲它使得它很容易理解正是計算機的工作,因爲您可以控制在每一步究竟發生了什麼。
(漏抽象一點也適用於訪問特定/定製的硬件組件。)
+0
非常感謝你的回覆。現在它向我澄清了彙編語言的需要。 –
相關問題
- 1. 彙編語言diff工具
- 2. 如何編寫彙編語言 - 我需要設置什麼
- 3. 複雜,如果用匯編語言語句(肽8)
- 4. 彙編語言編碼幫助需要
- 5. 爲什麼我們在MIPS彙編語言中使用.globl main?
- 6. 爲什麼我們不需要動態語言的接口?
- 7. 是否有高級語言編譯爲低級語言(如C)的術語?
- 8. 需要學習哪種彙編語言
- 9. 彙編語言
- 10. 彙編語言?
- 11. nasm彙編語言中的$是什麼?
- 12. 彙編語言工具和參考
- 13. 將彙編語言宏轉換爲純彙編語言
- 14. 這個彙編語言程序需要改變什麼?
- 15. 如果我想使用Telerik的Kendo UI,需要什麼語言?
- 16. 爲什麼c語言需要((;;))循環?
- 17. .NET彙編語言
- 18. SPARC彙編語言
- 19. x86彙編語言
- 20. 彙編語言環
- 21. CMP彙編語言
- 22. 彙編語言Bubblesort
- 23. 彙編語言IA32
- 24. ARMv6彙編語言
- 25. 彙編語言 - LDI
- 26. MIPS彙編語言
- 27. 彙編語言 - 乘
- 28. MIPS彙編語言
- 29. LC3彙編語言
- 30. 8086彙編語言
高級語言知道幾乎一無所知的硬件和往往沒有訪問它的方式。這是組裝來救援的地方。另一個用途是代碼的大小/速度優化。 –
這個問題聽起來好像在http://programmers.stackexchange.com上更適合。總之,因爲所有高級語言都自動編譯爲ASM。這使您無法控制最終結果,而不考慮計算機實際執行的操作。儘管編譯器很好,但他們無法知道所有的小技巧並優化代碼以達到完美。如果您希望獲得最佳性能,您需要完全控制計算機在每個細節中所做的工作,而這是高級語言無法提供的。 – deceze
謝謝Alex和deceze –