2011-12-15 75 views
7

我經常聽到身邊的人喜歡用匯編語言進行討論,這也是我想學習編寫它的原因之一。目前我正在學習彙編和C。你是否曾經需要用匯編語言編寫真正的代碼?

所以,我的問題是你什麼時候需要用真實代碼編寫程序集?
這只是好學嗎?
在C中編寫代碼時,它有任何實際用途嗎?

任何有用的意見或解答將不勝感激!

+1

大會不再是有用的國際海事組織,但當它是,閱讀它往往比寫它更有用。 – zneak 2011-12-15 17:53:57

回答

4

這很少見。我從未有過23年的職業生涯。但是我主要在Client Server DB應用程序空間中工作,有許多工作需要使用它,或者至少需要知道處理器的實際工作方式。

然而,這是我學到的第一件事,不包括基本的數字電子學,我會說學習對我的職業生涯和業餘愛好編程有很大的幫助。

5

我會寫很長的文章,但決定,而不是總結:

  1. 嵌入代碼,引導加載程序,編譯器後端
  2. 是的,它會幫助你理解和調試你的編譯代碼
  3. 我在c中使用它的唯一時間是用於讀取實時時鐘寄存器
8

儘管在彙編中編寫代碼變得越來越少,但它仍然非常好n彙編只是爲了瞭解事情如何在引擎蓋下工作。現代的C/C++優化編譯器讓你可以用C語言編寫代碼,將其轉化爲高質量的彙編指令,通常超出了你可以手動編寫的代碼,從而導致結果的可讀性降低(例如插入空指令以優化CPU的管道)。

如果您爲新架構,非常低級別的庫或具有嚴格資源約束的嵌入式系統編寫編譯器,則可能需要使用匯編。對於其他任何事情,C和C++都可以做得更好或更好。

2

我有很多場合需要在工作中編寫asm代碼,其中C或者根本無法做某些事情(例如訪問特殊的CPU寄存器或使用CPU的系統指令),或者編譯的C代碼也是如此慢或太大(編譯器不夠好)。

儘管如此,asm代碼或時間花費的一小部分花費很少。

學習asm很好。它使你通過你的C代碼「看到」,預測哪些指令和它變成了多少,大致估計部分代碼的速度。在這個過程中,您將學習許多優化和其他技巧以及一些很酷的算法/方法,然後您可以將它們轉換爲C代碼。只要看看有關C指針或數字在二進制和十進制或任意精度算術之間轉換的衆多問題。瞭解asm有助於這些和其他事情。

3

彙編語言的專業使用在嵌入式世界中非常普遍。在我們身邊有很多應用,微控制器做簡單而有用的事情。例如,看看tinyAVR family of microcontrollers from Atmel,特別是ATtiny13,它具有可編程的小1kB程序存儲器,除了32個8位CPU寄存器外根本沒有RAM。這是驚人的,但這些芯片是capable of。大批量購買時,該芯片的價格約爲1美元。因此,當您生產大量需要簡單(甚至不是很簡單)邏輯的器件時,硬件生產成本的節省遠遠超過手工編寫彙編器代碼以使其在極其有限的平臺上工作的開銷。

2

到目前爲止,我已經在2011年做了兩次,而且我主要從事Java業務應用程序的工作。派上用場來掀起一個快速的setup.exe來包裝JRE和應用程序安裝。可以用C語言來完成,但是抓取和設置彙編程序比編譯器更快,對於這樣一個簡單的應用程序來說,寫入時間無論如何都是可比的......還用它來處理與USB設備接口的問題。由於不知名的原因,通過JNA失敗了,所以我在大會上寫了這封信,以確保我知道每一個細節在哪裏以及什麼時候發生。