私の目標は、ソフトウェアアプリケーションの開発、そしておそらくWebアプリケーションの開発に焦点を当てていますが、おそらくデスクトップアプリケーションです。私はC/C ++に慣れるための道を歩み始めていますが、それよりもはるかに低いレベルでアセンブリを実行する必要がありますか?それとも、長期的な目標にメリットがないのでしょうか。
11 に答える
この質問に対する「いいえ」の答えがたくさんあるのを見て、私は本当に驚いています。アセンブリを学ぶべきだと思います。
仕事の一環としてアセンブリを直接使用することはないと思います。しかし、それからあなたがそれを学ぶべきではないということにはなりません。
アセンブリを学習すると、コンピューター内で何が起こっているかがわかります。ソフトウェアが実際に何をしているのかを理解するのに役立ちます。
それは本当にプロ意識についてです。あなたはプロのソフトウェアエンジニアになりますか?それとも、コピーアンドペーストのハックになりますか?確かに、後者は手形を支払うかもしれませんが、専門家であることははるかに満足です。
誰かが「いや、アセンブリを学ぶのは気にしないでください」と言うのを聞くと、「これが橋を建設するための料理本です。橋を建設するために物理学や工学について学ぶ必要はありません。これらのレシピに従ってください。 「」いいえ、結構です。
G'day、
Electを行ったときに、PDPアセンブラーを学びました。工学 70年代後半の学位。私が実際に使用したアセンブラの最後の方言には、4つの異なるメモリアドレス指定モードがありました。私が最後に見た方言には17のモードがありました!
最近、ラーニングアセンブラーが実際に何を提供するのかわかりません。当時、それは私の選出でのCSストリームの重要な部分でした。eng。程度。
C ++の学習に関しては、「他のビットを使用したC」としてではなく、それ自体でC++にアプローチする「 AcceleratedC++」をじっくりと学習します。
Cに関しては、最新バージョンの「Cプログラミング言語」(別名)K'n'Rを試してみます。
お役に立てれば。
乾杯、ロブ
さて、あなたがナノプログラミングについて尋ねたら...(-:
「集会の方言を学ぶことは価値がありますか?」
私は専門的にアセンブリをプログラムしました。ファックス機とスキャナーを実行しているM68k。また、Windows VxD(仮想デバイスドライバー)は、実際のカーネルが存在する3/3。1日前にWindowsに戻りました。
通常のソフトウェアのようなタスク(メモリのコピー、文字列の連結、割り込みハンドラの呼び出しなど)を実行するようにアセンブリをコーディングする場合、それは一種の興味深いものです。特定のプロセッサで可能な限り高速に特殊なタスクを実行するために、Cコードによって呼び出されるアセンブリをコーディングする場合があります。プロセッサが提供するすべてのサイクルを活用する方法を探しているので、これはさらに興味深いものになる可能性があります。プロセッサのL1キャッシュに何が入っているかが気になります。キャッシュラインのヒットを回避するために、メモリ内のデータを整列させることに関心があります(用語を覚えている場合)。デュアルパイプラインプロセッサアーキテクチャに関心があり、正しい2つまたは3つまたは4つの命令を正しい順序で使用して、2つまたは3つまたは4つのことが1つのクロックティック(プロセッサのXgHzのHZの1つ)で発生するようにします。
カスタムハードウェアを駆動するようにアセンブリをコーディングすると、16バイトのメモリバッファを埋め、DMA操作を設定し、そのデータをレーザープリンタドラムの駆動などを実行するコントローラに送信するなどの処理を実行します。そして、ドラムは回転していて停止できず、次の5us以内に次の16バイトを必要としています。もちろん、これはCまたはC++で実行できます。しかし、例は無限です。
「集会の方言を学ぶことは価値があるのか」というあなたの質問の後半を切り落とすかもしれません。そして、「学ぶ価値はあるのか」と考えてください。
プログラミングが好きなら、「価値」をどのように定義するかには、プログラミングが好きな要素が含まれます。その意味で、私はプログラミングで何かを学んだことはなく、それが価値があるとは思っていませんでした。あとはあまり使わなくても。
同じ意味で、何かを学ぶのが難しいほど、それは「価値がある」と言っても過言ではありません。
しかし、そのすべてのふわふわのがらくたはさておき、少なくともいくつかのアセンブリの背景を取得することは価値があると私は信じています。先に進んで、strcpy、memmoveなどのいくつかの単純なstdlibルーチンを置き換えるアセンブリを作成する方法を理解します。次に、タイミングを取りながらCから100万回呼び出して、それらを最適化してみます。
私はASMを学び始めませんでした。C / C ++を学びたい場合は、それから始めてください。コードの品質が成熟するにつれて、ASMが必要になる場合があります。99%の時間は必要ありませんが、時々必要になる場合があります。
また、C /C++が舞台裏で何をしているのかを理解するという観点からASMを知ることも役立ちます。しかし、繰り返しになりますが、あなたがより高度になるまで、あなたはおそらくそれを必要としないでしょう。
私はそうしました、そしてそれはその時私を助けたと思います。それはもう私には役に立たないが、それはあなたの仕事次第だと思う。
私は20年前にコモドールでアセンブラーを学び、大学ではIBMメインフレームで再び学びました。それが私の現在の仕事に役立つとは言えません。
直接申請しない限り、おそらく多くのメリットはありません。一般的な知識が必要な場合は、C /C++から始めるのが最適です。
とはいえ、アセンブリがもたらす課題は非常に興味深いものであり、物事を成し遂げるにはかなり異なる考え方が必要です。
TI-86計算機をプログラミングして、Z80アセンブリの学習に少し時間を費やしました。Z80命令セットはかなり小さく、アセンブリで電卓をプログラミングするという目新しさは非常に面白いものです。
ticalc.orgには、 TIアセンブリプログラミングに関する優れたリソースがたくさんあります。
マークに同意します。これは、C#、VB.NET、または別の.NET言語で作成するときにMSILを学習するのと似ていると思います。内部で何が起こっているのかを知ることは役に立ちますが、機能し、それを必要としないアプリケーションを作成するために一生を過ごすことができます。
いいえ。楽しみたいのでなければ、アセンブリを学ぶ必要はありません。
ドライバーの作成、OSの開発、エクスプロイトの開発など、アセンブリについて知っておく必要のあることがいくつかありますが、それを除けば、個人的には、知らなくてもいつまでも幸せにコーディングできると信じています。
あなたがアセンブリを学ぶ必要があるなら、あなたはそれを知っているでしょう-私はそれを学ぶためにそれを学ぶことはありません。
アンマネージC++を作成している場合、少なくとも基本的なx86アセンブリ、2進数システムなどを知っていると非常に貴重な場合があります。私は主にC / C ++開発を行っており、マシンに固有のエラーについて製品コードをデバッグする必要がある場合があります。 -コンパイラによって生成されたコード表現。バグを見つけて修正する唯一の方法は、逆コンパイルされたアセンブリを読み取り、コンパイラがそのように生成した理由を確認することです。
アセンブリの詳細については、質問を参照してください:アセンブリを学ぶための最良の方法は何ですか?具体的には、動的言語の経験がある人のために。
組み立てはそれほど難しくありません。Cに慣れたら、1日か2日かけて基本的なアセンブリを学びます。デバッグの面でのその有用性は非常に大きく、それに加えて、Cと同等の速度を10、15、またはそれ以上上回るコードを記述できることの楽しさもあります。
「現代のアセンブラー言語」を学ぶことはお勧めしません。
ただし、 MOS 6510アセンブラーについて少し知っていて、分解されたC64カーネル(別名OSおよびBASICインタープリター)を参照することで、コンピューター内部で何が起こっているのか(割り込みやメモリページなど)を理解するのに大いに役立ちました。
これは、他の言語で最適化されたコードを作成する方法のヒントを提供するのに役立つ可能性があります。しかし、その多くはすでに最新のコンパイラーによって行われているので、そのブラックボックス内で何が起こっているかに興味がある場合にのみお勧めします。