web-dev-qa-db-ja.com

なぜプログラムはもっと頻繁にアセンブリで書かれないのですか?

アセンブリプログラミングはCのような高級言語よりも時間がかかり、プログラミングが難しいというのが主流の意見であるように思われます。そして移植性が良いという理由で。

最近私はx86アセンブリで書いています、そしておそらく移植性を除いて、おそらくこれらの理由は本当ではないということを私に明らかにしました。おそらくそれは、もっとよく知っていることと、アセンブリをうまく書く方法を知っていることの問題です。私はまた、AssemblyでのプログラミングはHLLでのプログラミングとはかなり異なることに気づきました。おそらく、経験豊富なCプログラマーがC言語で書くのと同じくらい簡単かつ迅速に、優秀で経験豊富なAssemblyプログラマーがプログラムを書くことができます。

おそらく、それはアセンブリプログラミングがHLLとはまったく異なるため、異なる考え方、方法、および方法を必要とし、それが不慣れであるためにプログラムを書くのは非常に面倒であり、プログラムを書くのに悪い名前を与えるためです。

移植性が問題にならないのであれば、実際には、CがNASMのような優れたアセンブラに何をもたらすのでしょうか。

編集する ただ指摘するだけです。アセンブリで書いているときは、命令コードだけで書く必要はありません。プログラムをよりモジュール化し、保守しやすく、そして読みやすくするために、マクロや手続き、そして独自の規則を使ってさまざまな抽象化を行うことができます。これが、良い議会の書き方に精通していることが出てくるところです。

216
mudge

ASMは、高水準言語と比較して、判読性が低いおよび実際には保守できないを持っています。

また、Cのような他の一般的な言語よりも多くのASM開発者が少ないがあります。

さらに、高水準言語を使用し、新しいASM命令が使用可能になる(SSEなど)の場合は、コンパイラを更新するだけで済み、古いコードで新しい命令を簡単に利用できます。

次のCPUに2倍の数のレジスタがあるとどうなりますか?

この質問の逆は、次のようになります。コンパイラにはどのような機能がありますか?

私はあなたがgcc -O3ができるよりもあなたのASMをより良く最適化することができるか、望むことを望んでいます/すべきです。

332
Ben S

Hell®、私はコンパイラです。

この文章を読んでいる間に、何千行ものコードをスキャンしました。私はあなたが何年もかけて費やすであろう膨大な量の学術研究に基づいて何百もの異なる最適化技術を使ってあなたの一行を最適化する何百万もの可能性を通してブラウズしました。 3行のループを何千もの命令に変換しても、処理が速くなるので、ちょっとした気まぐれでさえも恥ずかしさを感じることはありません。私は莫大な長さの最適化を行ったり、最も厄介なトリックをしたりするのは恥ずかしいことではありません。そして、あなたが私にしたくないのであれば、おそらく一日か二日の間、私は振る舞い、あなたが好きなようにそれをします。コードの1行を変更することなく、必要なときにいつでも使用しているメソッドを変換できます。必要に応じて、アセンブリ内、プロセッサアーキテクチャやオペレーティングシステムごと、アセンブリ規約ごとに、コードがどのように見えるかについても説明できます。はい、全部数秒です。あなたが知っているので、私はできます。そして、あなたは知っています、あなたはできません。

P.Sおお、あなたが書いたコードの半分を使っていなかったのです。私はあなたに賛成をし、それを捨てました。

1932
Sedat Kapanoglu

私は6502、Z80、6809および8086チップ用のアセンブラの小容量を書いています。私が取り組んでいたプラットフォームでCコンパイラが利用可能になるとすぐにやめるようになり、すぐに生産性が少なくとも10倍向上しました。ほとんどの優秀なプログラマーは合理的な理由で彼らが使用するツールを使用します。

99
anon

私はアセンブリ言語でのプログラミングが大好きですが、高水準言語と同じことをするにはより多くのコードが必要です。また、コード行とバグの間には直接的な相関関係があります。 (これは何十年も前に The Mythical Man-Month で説明されています。)

Cを「ハイレベルアセンブリ」と見なすことは可能ですが、その上にいくつかのステップを踏むと、あなたは別の世界にいることになります。 C#では、これを書くことについて二度考えないでください。

foreach (string s in listOfStrings) { /* do stuff */ }

これは数十、場合によっては数百行にも及ぶアセンブリのコードであり、それを実装する各プログラマーは異なるアプローチを取り、次の人がそれを理解する必要があります。したがって、プログラムは主に他の人が読むために書かれていると多くの人が信じているのであれば、Assemblyは一般的なHLLよりも読みにくくなります。

編集:一般的なタスクに使われるコードの個人的なライブラリと、Cのような制御構造を実装するためのマクロを集めました。しかし、GUIが標準になった90年代に私は壁にぶつかりました。日常的なことに多くの時間が費やされていました。

ASMが不可欠であった最後の仕事は数年前、マルウェアと闘うためのコードを書くことでした。ユーザーインターフェイスがないので、膨大な部分がなくても楽しかったです。

72
egrunin

読みやすさ、保守容易性、コードの短縮、したがってバグの減少に関する他の人々の答えに加えて、はるかに簡単であることに加えて、私は追加の理由を追加します。

プログラム速度.

はい。アセンブリでは、最後のすべてのサイクルを利用して物理的に可能な限り速くするようにコードを手動で調整できます。しかし、誰が時間がありますか?あなたが完全に愚かではないCプログラムを書くなら、コンパイラーはあなたのために最適化の本当に良い仕事をするでしょう。最適化の少なくとも95%は手作業で行うことになるでしょう。それを追跡する必要はありません。ここには間違いなく90/10の種類のルールがあり、そこでは最後の5%の最適化があなたの時間の95%を占めてしまうでしょう。それでは、なぜ迷惑なのでしょうか。

15
Brian Postow

平均的な生産プログラムが100k行のコードを言っていて、各行が約8-12のアセンブラ命令ならば、それは100万のアセンブラ命令になるでしょう。

たとえあなたがこれらすべてを適当な速度で手で書くことができたとしても(あなたが書かなければならないその8倍多いコードを覚えておいてください)、あなたがいくつかの機能を変えたいとしたらどうなりますか? 100万の指示から数週間前に書いたことを理解するのは悪夢です。モジュール、クラス、オブジェクト指向設計、フレームワーク、そしてものはありません。そして、最も単純なものでさえも作成しなければならない似たようなコードの量は、せいぜい気が遠くなるほど困難です。

その上、あなたはあなたのコードをほぼ同様に高級言語と同様に最適化することができません。例えばCはあなたのコードだけでなくあなたのdescribeあなたの意図のために非常に多くの最適化を実行するところではあなたはコードを書くだけであり、アセンブラは実際には何の注意に値する最適化を実行できません。あなたのコードあなたが書くものはあなたが得るものであり、そして私を信頼してください、あなたがそれを書くようにあなたが確実にパッチを当て、パッチを当てる100万の命令を確実に最適化することはできません。

13
Blindy

私は「昔は」たくさんのアセンブリを書いてきました、そして私が高水準言語でプログラムを書くとき私がはるかに生産的であることをあなたに保証することができます。

8
Maurice Perry

合理的なレベルのアセンブラ能力は、特にあなたがそのようなアセンブラを書かなければならないというわけではないが、時々それがボックスが何であるかを理解することが重要なので 本当にやっている。アセンブラの概念と問題について低レベルの理解がない場合、これは非常に困難になる可能性があります。

しかし、実際にアセンブラで多くのコードを書くことに関しては、それがあまり行われていないいくつかの理由があります。

  • 単に(ほとんど)必要はありません。ごく初期のシステム初期化や、C言語の関数やマクロに隠されたいくつかのアセンブラフラグメントを除いて、いったんアセンブラで書かれたかもしれないすべての非常に低レベルのコードは、問題なくCまたはC++で書くことができる。

  • 高級言語(CやC++でも)のコードでは、機能がはるかに少ない行に集約されており、バグの数がソースコードの行数と相関することを示すかなりの研究があります。つまり、同じ問題がアセンブラとCで解決され、アセンブラにはもっと長いという理由だけでバグが増えます。同じ議論が、Perl、Pythonなどの高水準言語への移行の動機となっています。

  • アセンブラで書くと、詳細なメモリレイアウト、命令の選択、アルゴリズムの選択、スタック管理など、問題のあらゆる側面に対処しなければなりません。 LOCの条件.

基本的に、上記のすべては、C言語または他の言語に対して、アセンブラで利用可能な抽象化のレベルに関連しています。アセンブラはあなたにあなた自身の抽象化の全てを作り、そしてあなた自身の自己規律を通してそれらを維持することを強制します。そこではCのようなどんな中間レベルの言語、そして特に高水準言語も箱から出して抽象化を提供します比較的簡単に新しいものを作成する機能。

6
Dale Hagglund

組み込みプログラミングの世界で彼の時間の大部分を費やす開発者として、私はアセンブリが死んだ/時代遅れの言語からかけ離れていると主張するでしょう。高レベルの言語では正確にも効率的にも表現できないことがある(たとえば、ドライバでの)特定のメタルに近いレベルのコーディングがあります。私たちはほとんどすべてのハードウェアインタフェースルーチンをアセンブラで書いています。

とはいえ、このアセンブリコードはCコードから呼び出すことができるようにラップされており、ライブラリのように扱われます。プログラム全体をAssemblyで書くことは多くの理由ではありません。まず第一に移植性です。当社のコードベースは、異なるアーキテクチャを使用するいくつかの製品で使用されており、それらの間で共有できるコードの量を最大限にしたいと考えています。第二は開発者の熟知度です。簡単に言うと、学校は以前のようにAssemblyを教えているわけではありません。また、Cの方が開発者の方がAssemblyよりはるかに生産的です。また、アセンブリ言語のコードでは利用できないCのコードでは、さまざまな「追加機能」(ライブラリ、デバッガ、静的解析ツールなど)を利用できます。純粋なアセンブリプログラムを作成したいとしても、いくつかの重要なハードウェアライブラリはCライブラリとしてしか利用できないため、できません。ある意味で、それは鶏肉/卵子の問題です。利用できるライブラリや開発/デバッグツールがそれほど多くないため、人々はAssemblyから遠ざかっていますが、それらを作成する努力を保証するのに十分な人々がAssemblyを使用していないため、lib /ツールは存在しません。

結局のところ、ほぼあらゆる言語のための時間と場所があります。人々は、彼らが最も身近で生産的なものを使う。アセンブリのためのプログラマのレパートリーの中にはおそらく常に場所があるでしょうが、ほとんどのプログラマは、はるかに短い時間でほとんど同じくらい効率的な高水準言語でコードを書くことができることに気付くでしょう。

6
bta

アセンブリで書いているときは、命令コードだけで書く必要はありません。プログラムをよりモジュール化し、保守しやすく、そして読みやすくするために、マクロや手続き、そして独自の規則を使ってさまざまな抽象化を行うことができます。

つまり、基本的に言っているのは、洗練されたアセンブラを巧みに使用すれば、ASMコードをCに近づけることができます。 Cプログラマと同じくらい生産的です。

それはあなたの質問に答えますか? ;-)

私はこれを愚かに言っていません:私はまさにそのようなアセンブラとシステムを使ってプログラムしました。さらに良いことには、アセンブラは仮想プロセッサをターゲットにし、別のトランスレータがターゲットプラットフォーム用にアセンブラの出力をコンパイルします。 LLVMのIFとよく似ていますが、初期の形では約10年前の日付です。そのため、移植性に加えて、効率化のために必要な場合に特定のターゲットアサンプラ用のルーチンを作成する機能もありました。

そのアセンブラを使って書くのはCと同じくらい生産的で、GCC-3(私が関わっていた頃にはありました)と比較すると、アセンブラ/トランスレータはおおよそ速くて普通小さいコードを作りました。サイズは本当に重要でした、そして、会社にはプログラマーがほとんどいなくて、彼らが有用な何かをすることができる前に新しい採用に新しい言語を教えて喜んでいました。また、アセンブラを知らない人(顧客など)がCを書いて、同じ呼び出し規約などを使用して同じ仮想プロセッサ用にコンパイルできるため、インターフェイスがきれいになりました。それで、それは限界的な勝利のように感じました。

それは、アセンブラ技術やライブラリなどを開発するために、何年もの労力を費やしたものでした。確かに、そのうちの1つが1つのアーキテクチャーのみをターゲットにしていたのであれば、すべてを歌うオールダンスのアセンブラーがはるかに簡単だったはずです。

要約すると、あなたはCが好きではないかもしれませんが、Cを使う努力が何かもっと良いものを思いつく努力よりも大きいという意味ではありません。

6
Steve Jessop

私たちがもう外にトイレに行かないのと同じ理由、または私たちがラテン語やアラム語を話さない理由。

テクノロジーが登場し、物事がより簡単になり、よりアクセスしやすくなります。

編集 - 厄介な人々を止めるために、私は特定の言葉を削除しました。

5
Jack Marchetti

アセンブリは異なるマイクロプロセッサ間では持ち運びできません。

5
semaj

どうして?簡単です。

これを比較してください。

        for (var i = 1; i <= 100; i++)
        {
            if (i % 3 == 0)
                Console.Write("Fizz");
            if (i % 5 == 0)
                Console.Write("Buzz");
            if (i % 3 != 0 && i % 5 != 0)
                Console.Write(i);
            Console.WriteLine();
        }

.locals init (
    [0] int32 i)
L_0000: ldc.i4.1 
L_0001: stloc.0 
L_0002: br.s L_003b
L_0004: ldloc.0 
L_0005: ldc.i4.3 
L_0006: rem 
L_0007: brtrue.s L_0013
L_0009: ldstr "Fizz"
L_000e: call void [mscorlib]System.Console::Write(string)
L_0013: ldloc.0 
L_0014: ldc.i4.5 
L_0015: rem 
L_0016: brtrue.s L_0022
L_0018: ldstr "Buzz"
L_001d: call void [mscorlib]System.Console::Write(string)
L_0022: ldloc.0 
L_0023: ldc.i4.3 
L_0024: rem 
L_0025: brfalse.s L_0032
L_0027: ldloc.0 
L_0028: ldc.i4.5 
L_0029: rem 
L_002a: brfalse.s L_0032
L_002c: ldloc.0 
L_002d: call void [mscorlib]System.Console::Write(int32)
L_0032: call void [mscorlib]System.Console::WriteLine()
L_0037: ldloc.0 
L_0038: ldc.i4.1 
L_0039: add 
L_003a: stloc.0 
L_003b: ldloc.0 
L_003c: ldc.i4.s 100
L_003e: ble.s L_0004
L_0040: ret 

それらは機能的に同一です。 2番目のものはアセンブラではなく.NET IL(Javaのバイトコードに似た中間言語)です。 2回目のコンパイルでは、ILをネイティブコード(つまりほとんどアセンブラ)に変換し、ILをさらに暗号化します。

4
Andrei Rînea

私はx86(_64)でもASMはあなたがコンパイラにとって最適化するのが難しい命令を利用することによって多くを得る場合に理にかなっていると思います。例えばx264はエンコーディングに大量のasmを使用しており、速度の向上は非常に大きいです。

3
Maister

他の人が言ったことのほとんどをやめなさい。

C言語が発明される以前の高水準言語がCOBOLやFORTRANのようなものだった頃は、アセンブラに頼らないとできないことがたくさんありました。柔軟性を最大限に活用し、すべてのデバイスにアクセスできるようにするには、それが唯一の方法でした。しかしその後、Cが発明され、Assemblyで可能なことはほとんどCでも可能になりました。それから。

そうは言っても、私はそれが新しいプログラマーがアセンブラで書くことを学ぶのに非常に役に立つ練習であると思います。彼らが実際にそれを多用するからではなく、それからあなたはコンピュータの内部で実際に何が起こっているのか理解しているからです。私は、ビットとバイトとレジスタに関して実際に何が起こっているのかわからないプログラマーから、たくさんのプログラミングエラーと非効率なコードを見ました。

2
Jay

初期の発見の1つ(あなたはそれをBrooksのMythical Man-Month、これは1960年代の経験から来ています)にあるのです。 1日にデバッグされたコード行。これは明らかに普遍的に真実ではなく、押しすぎると壊れる可能性がありますが、それはBrooksの時代の高水準言語に一般的に当てはまりました。

したがって、生産性を上げるための最速の方法は、1行のコードで複数の結果が得られた言語を使用することです。実際、これは少なくともFORTRANやCOBOLのような複雑な言語に対しては有効です。

2
David Thornley

移植性は常に問題です - 今でなければ、少なくとも最終的には。プログラミング業界は毎年、何十億ドルもの歳月をかけたソフトウェアを移植するために費やしています。

2
Thomas Pornin

アセンブリが一般的ではなくなるにつれて、悪循環が起こりました。高水準言語が成熟するにつれて、アセンブリ言語命令セットはプログラマの利便性のために作成されることが少なくなり、コンパイラのために作成されました。

だから今、現実的には、どのレジスタを使うべきか、あるいはどの命令がもう少し効率的かなど、正しい判断を下すことは非常に難しいかもしれません。コンパイラはヒューリスティックを使用して、どのトレードオフが最も効果がある可能性が高いかを判断できます。小さな問題を通して考えることができ、現在の非常に洗練されたコンパイラーを打ち負かす可能性があるローカル最適化を見つけることができますが、平均的なケースでは、良いコンパイラーが良いプログラマーよりも良い仕事をするでしょう。やがて、ジョン・ヘンリーのように、私たちはそのマシンを打ち負かしたかもしれませんが、そこに着くことを真剣に燃え尽きるかもしれません。

私たちの問題もまた今ではかなり異なっています。 1986年、私は小さなプログラムでもう少しスピードを上げる方法を見つけようとしていました。私はそのアニメーションがよりぎくしゃくしないようにしたかった。アセンブリ言語の公正な訴訟今私は、住宅ローンの契約言語とサービサー・ポリシーに関する抽象概念をどのように表現するかを考えようとしています。むしろ、ビジネス関係者が話す言語に近いものを読むことをお勧めします。 LISPマクロとは異なり、アセンブリマクロはルールの点ではあまり強制されていません。そのため、良いアセンブラでDSLに合理的に近いものを手に入れることができたとしても、勝つことのあらゆる種類の癖私がRuby、Boo、LISP、C#あるいはF#で同じコードを書いた場合、私に問題を起こさない。

あなたの問題が効率的なアセンブリ言語で表現するのが簡単であるならば、しかし、あなたにもっと力を。

2
JasonTrue

私は約1ヶ月間、Assemblyでプログラミングを続けています。私はよくCでコードを書き、それからアセンブリのためにそれをコンパイルして私を助けます。おそらく私はCコンパイラの最大限の最適化能力を利用していませんが、私のC asmソースには不要な操作が含まれているようです。それで、私は、良いCコンパイラが良いAssemblyコーダよりも優れているという話が必ずしも真実ではないことを理解し始めています。

とにかく、私の総会プログラムはとても速いです。アセンブリを使用すればするほど、コードの作成にかかる時間が短縮されます。それほど難しいことではありません。また、議会の判読性が低いというコメントも正しくありません。もしあなたがあなたのプログラムに正しくラベルを付け、必要とされる追加の詳細があるときにコメントをするなら、あなたはすべて設定されるべきです。実際、ある意味でアセンブリはプログラマにとってより明確です。なぜなら、彼らはプロセッサのレベルで何が起こっているのかを見ているからです。私は他のプログラマーについては知りませんが、何かがブラックボックスに入っているのではなく、何が起こっているのかを知るのが好きです。

そうは言っても、コンパイラの本当の利点は、コンパイラがパターンと関係を理解し​​、それからソース内の適切な場所にそれらを自動的にコーディングできることです。一般的な例の1つは、コンパイラが関数ポインタを最適にマッピングする必要があるC++の仮想関数です。しかしながら、コンパイラは、コンパイラの製造元がコンパイラに許可していることを行うことに限定されています。これは、アセンブラを使用して簡単に実行できた場合、プログラマが自分のコードを使って奇妙なことをしてコーディング時間を増やすことに頼らなければならない場合があることを意味します。

個人的には、私は市場が高水準言語を大いにサポートしていると思います。もしアセンブリ言語が今日存在している唯一の言語であるならば、彼らはプログラミングの約70%少ない人々とおそらく誰かが私達の世界がどこにあるのかを知っている人を知っているでしょう。高水準言語は、より幅広い人々にアピールします。これにより、より多くのプログラマが私たちの世界に必要なインフラストラクチャを構築することができます。中国やインドなどの発展途上国は、Javaなどの言語から大きな恩恵を受けています。これらの国々はITインフラストラクチャを急速に発展させ、人々はより相互に関連するようになるでしょう。つまり、高級言語は優れたコードを生成するのではなく、世界の市場で需要を満たすのに役立つからです。

2
user922475

私は多くの理由があると確信していますが、私が考えることができる2つの簡単な理由はあります

  1. アセンブリコードは絶対に読みにくくなっています(私は書くのに時間がかかることを前向きにしています)。
  2. あなたが製品に取り組んでいる開発者の巨大なチームを持っているとき、それはあなたのコードを論理的なブロックに分けて、そしてインターフェースによって保護させるのに役立ちます。
2
Martin Konecny

私が個人的にAssemblyでプログラムをそれほど頻繁に書かない理由にしか答えられません、そして主な理由はそれがもっと退屈なすることだからです。また、すぐに気づかずに、物事を微妙に間違えやすくするためだと思います。たとえば、1つのルーチン内でレジスタの使用方法を変更することができますが、これを1か所で変更することを忘れないでください。それはうまく組み立てるでしょう、そしてあなたはずっと後まで気付かないかもしれません。

そうは言っても、議会にはまだ有効な用途があると思います。たとえば、私は、SIMDを使用して、「すべてのビットは神聖な」という妄想的なアプローチに従って大量のデータを処理するために、かなり最適化されたアセンブリルーチンをいくつか持っています。 (ただし、単純なアセンブリ実装は、コンパイラが生成するものよりもはるかに悪いことがよくあります。)

1
PhiS

私は今、comp orgでAssemblyを学んでいますが、面白いのですが、書くことも非常に非効率的です。物事をうまく動かすためには、より多くの詳細を頭に入れておく必要があります。 。たとえば、C++の単純な6行forループは、18行以上のAssemblyに相当します。

個人的には、ハードウェアレベルで物事がどのように機能するのかを学ぶのは楽しいことがたくさんあり、コンピューティングがどのように機能するかについて、より多くの感謝をしています。

1
Jason

人々は他の方向性もあることを忘れているようです。

そもそもなぜアセンブラで書いているのですか。プログラムを本当に低レベルの言語で書かないでください。

の代わりに

mov eax, 0x123
add eax, 0x456
Push eax
call printInt

あなたも書くことができます

B823010000
0556040000
50 
FF15.....

それはとても多くの利点があります、あなたはあなたのプログラムの正確なサイズを知っています、あなたは他の命令のための入力として命令の値を再利用できますそれを書くためにアセンブラが必要です、あなたは任意のテキストエディタを使用することができます...

そして、あなたがまだこれについてAssemblerを好む理由は、他の人々がCを好む理由です...

1
BeniBela

Cはマクロアセンブラです。そしてそれは最高のものです!

それはアセンブリができることのほとんどすべてを行うことができます、それは移植性があることができて、あなたがまだ埋め込みアセンブリコードを使うことができる何かをすることができない稀なケースのほとんどで。これは、あなたが絶対にAssemblyで書く必要がある、そしてAssembly以外の何もないプログラムのごく一部だけを残します。

そして、より高いレベルの抽象化と移植性は、ほとんどの人にとってCでシステムソフトウェアを書くことをより価値のあるものにします。あなたが今ある移植性を必要としないかもしれないが将来使用できるようになるでしょう。

1
ahe

Cが優れたマクロアセンブラより優れているのは、言語Cです。型チェック。ループ構成自動スタック管理(ほぼ)自動変数管理アセンブラーの動的メモリー技術は、お尻の大きな痛みです。リンクされたリストを適切にすることは、Cと比べて恐ろしいほど正確ではありませんが、foo.insert()をリストしてください。そしてデバッグ - まあ、何がデバッグするのが簡単なのかについてのコンテストはありません。 HLLはあちこちで手に勝ちます。

私はアセンブラで考えることを非常に容易にするアセンブラで私のキャリアのほぼ半分をコーディングしました。それは私がCコンパイラが何をしているのかを見るのに役立ちます。これもまたCコンパイラが効率的に処理できるコードを書くのに役立ちます。 Cで書かれたよく考え抜かれたルーチンは、ちょっとした作業でアセンブラで欲しいものを正確に出力するように書くことができます - そしてそれは移植性があります!私はすでにクロスプラットフォームの理由でいくつかの古いasmルーチンをCに書き直す必要があり、それは面白くありません。

いいえ、私はCにこだわり、HLLで得られる生産性時間に対してパフォーマンスが時々わずかに低下することに対処します。

1
Michael Dorgan

それはいつもそのようにしているので:時が経つと良いものも過ぎ去る:(

しかし、asmコードを書くとき、それはあなたがそれがはるかに生産的でないことを知っているけれども、あなたが高水準言語をコーディングするときとは全く違った感じです。それはあなたがペインターであるようなものです:あなたはあなたが好きなようにあなたが好きなように自由に描くことができます。この言語がなくなるのは残念です。しかし、誰かがまだそれを覚えていてそれをコーディングしている間は、決して死ぬことはないでしょう!

0
edk

$$$

ある会社が開発者を雇い、コードを$$$に変える手助けをしています。 便利なコードを早く生成することができれば、そのコードを早く$$$に変換することができます。

高水準言語は、一般的に大量の有用なコードを生成するのに向いています。これは、議会にはその場所がないということではありません。

0
Sparky

HLLの利点は、AssemblyをCよりも高水準の言語と比較した場合にさらに大きくなります。 Java、Python、またはRuby。たとえば、これらの言語にはガベージコレクションがあります。メモリのチャンクを解放するタイミングについて心配する必要はなく、解放が早すぎることによるメモリリークやバグもありません。

0
user4660402

他の人が前述したように、どんなツールでも存在する理由はそれがいかに効率的に働くことができるかということです。 HLLは多くの行のasmコードと同じ仕事を成し遂げることができるので、Assemblyが他の言語に取って代わられるのは当然だと思います。そして、ハードウェアに煩わしい人のために - インラインアセンブリin Cと他の言語によるバリエーションがあります。 Paul Carter博士は、に述べています PC Assembly Language

「... Pascalのようなプログラミング言語よりも、コンピュータが実際に低レベルでどのように動作するかについての理解が深まります。アセンブリ言語でプログラムを学ぶことは、この目標を達成するための優れた方法です。」

私たちは私の大学課程で総会の紹介をしました。概念を明確にするのに役立ちます。しかし、私たちの誰もがアセンブリのコードの90%を書くことになるとは思わない。今日の詳細な国会の知識はどの程度関連性がありますか?

0
AruniRC