2008-08-26 102 views
3

我的目標主要集中在軟件應用程序開發,也許是Web應用程序開發,但最有可能的是桌面應用程序。我正在走上一條更加熟悉C/C++的道路,但是我應該遠遠低於C/C++,進入彙編階段?或者我對我的長期目標沒有好處?學習裝配方言是否值得?

回答

1

除非你有直接的應用程序,否則它可能不會有很多好處。如果你需要一般的知識,C/C++是一個很好的開始。

也就是說,大會構成的挑戰非常有趣,它需要一個完全不同的思維方式來完成任務。

我花了一點時間學習Z80大會編程TI-86計算器。 Z80指令集非常小,在程序集中編程計算器的新穎性非常有趣。

ticalc.orgTI assembly programming上有很多很好的資源。

+0

您也可以製作自制軟件Nintendo Gameboy遊戲(Z80組件的子集)。 – James 2014-02-26 07:22:02

1

我不會開始學習ASM。如果你想學習C/C++,那就從那開始吧。隨着代碼質量的成熟,您可能會發現您需要ASM。 99%的時間你不會,但時不時你可能需要它。

此外,它在瞭解C/C++在幕後做什麼方面知道ASM是有幫助的。但是,再次,直到你更先進,你可能不需要它。

1

我做到了,我認爲這對我有幫助。它不再幫我一天一天,但我認爲這取決於你的工作。

20年前,我在Commodore學習彙編,並在IBM大型機上學習了大學。我不能說這對我目前的工作有幫助。

1

我同意馬克。我認爲這與使用C#,VB.NET或其他.NET語言編寫代碼時學習MSIL類似。它有助於瞭解引擎蓋下發生了什麼,但是您可以在整個生命週期內創建適用並且從不需要的應用程序。

1

不,除非你想要好玩,否則你真的不需要學習裝配。

有一些事情你需要知道的程序集,如驅動程序的創建,操作系統開發,利用開發,但除此之外,我個人認爲你可以非常高興地編碼永遠不知道它。

如果你確實需要學習彙編,你就會知道它 - 我不會了解它,學習它的目的..

1

如果你正在編寫託管C++,它是無價偶爾要知道最基本的x86程序集,二進制數字系統等。我主要進行C/C++開發,而且偶爾需要調試生產代碼中的錯誤,這些錯誤對於編譯器生成的機器代碼表示非常特定,只有這樣才能找到,然後修復這個錯誤就是讀取反編譯後的程序集,並確定編譯器爲什麼會這樣生成它。

有關裝配的更多信息,請參閱問題:What is the best way to learn Assembly? Specifically, for someone who has experience in dynamic languages

3

G'day,

我學習了PDP彙編器時,我做了我的選舉。工程。 70年代後期。我真正使用的彙編程序的最後一種方言有四種不同的內存尋址模式。我嘟at的最後一種方言有17種模式!

不確定現在什麼樣的學習彙編程序真的給你帶來了什麼。那時候它是我選擇的CS流的重要組成部分。工程。度。

至於學習C++我剛剛坐下來,通過工作「Accelerated C++"這本身就是接近C++而不是‘與其他位’C。

至於C,我只是工作,通過最新版本"C Programming Lanuage"(AKA)K'n'R

希望這有助於的

歡呼聲, 羅布

現在,如果你問起納米progrmming ...( - :

0

我不會建議學習「現代彙編語言」。

但是知道一點點MOS 6510彙編程序並瀏覽反彙編C64 Kernel,a.k.a.它是OS和BASIC Interpreter,幫助我理解計算機內部正在發生的事情 - 例如中斷和內存頁面。

這可能會幫助您提示如何編寫其他語言的優化代碼。然而,很多 - 但是 - 已經由現代編譯器完成了,所以我只會建議如果你對這個黑盒子裏面發生的事情感興趣。

2

「是否值得去學習一個組裝方言?」

我有專業的程序集。運行傳真機和掃描儀的M68k。另外,Windows VxDs(虛擬設備驅動程序)在擁有真實內核之前的3/3.1天內回到Windows。

當你編寫程序集來完成普通的軟件-y類任務(複製內存,連接字符串,調用中斷處理程序等)時,這很有趣。有時候你可以用C代碼來調用匯編,以便在給定的處理器上儘可能快地執行一些特定的任務。這可能會更有趣,因爲您正在尋找利用處理器給予您的每個週期的方法。您關心處理器L1緩存中的內容。你關心對齊內存中的數據以避免緩存線命中(如果我記得這個術語)。您關心的是雙流水線處理器架構,並以正確的順序使用正確的2或3或4條指令,以便在單個時鐘週期(處理器的XgHz中的那些HZ中的一個)內發生2或3或4種情況。

當您編譯程序集來驅動自定義硬件時,現在您正在執行諸如填充16byte內存緩衝區,設置DMA操作並將該數據發送到控制器,該控制器正在執行某些操作,如驅動激光打印機鼓。鼓正在轉動,並且不能停止,並希望在接下來的5us內接下來的16個字節。當然,這可以用C或C++來完成。但是這些例子是無止境的。

我也許會修剪你問題的最後一部分「學習裝配方言是否值得?」讓它「值得它學習嗎?」

如果你喜歡編程,你如何定義「價值」涉及編程愛的一些組成部分。從這個意義上說,我從來沒有學過編程方面的東西,並不認爲這是值得的。即使我沒有用過多的後綴。

從同樣的意義上說,我幾乎可以說學得越難,就越「值得」。

但是,所有那些蓬鬆的垃圾放在一邊,我相信它是值得的,至少得到一些組裝背景。繼續研究如何編寫程序集來替換一些簡單的stdlib例程(如strcpy,memmove等),然後嘗試優化它們,並在計時時調用它們一百萬次。

1

裝配不是很困難。一旦你熟悉C,花一兩天學習基本程序集。它在調試方面的幫助非常大,而且它的樂趣在於能夠編寫代碼,使速度方面的C等效速度提高10倍,15倍甚至更多。

9

我真的很驚訝看到這麼多「沒有」這個問題的答案。我想你應該學會大會。

我不指望你會永遠使用程序集直接作爲您的工作的一部分。但是這並不意味着你不應該學習它。

學習大會將教你關於計算機內部正在發生什麼。它將幫助您瞭解軟件實際在做什麼。

這實際上是關於專業。你會成爲一名專業的軟件工程師嗎?或者你會成爲一個複製粘貼黑客?當然,後者可能會支付賬單,但作爲一名專業人士則更加令人滿意。

聽到有人說,「不要打擾學習大會」,聽起來像我的耳朵,「這是建橋的食譜,你不需要學習物理或工程學建橋。遵循這些食譜。「不,謝謝。