Hackaday に質問する: アセンブリを最初に学ぶか、最後に学ぶか、それともまったく学ばないのか?
ホームページホームページ > ブログ > Hackaday に質問する: アセンブリを最初に学ぶか、最後に学ぶか、それともまったく学ばないのか?

Hackaday に質問する: アセンブリを最初に学ぶか、最後に学ぶか、それともまったく学ばないのか?

Jul 15, 2023

数日前、あるオンライン投稿で、誰かが「アセンブリでプログラミングを学ぶ」という本を指摘し、最初のプログラミング言語としてアセンブリ言語を学んだ人はいるかという質問に遭遇しました。 ある程度の年齢の人なら、たとえそれが存在しなかった機械のアセンブリであっても、あなたの第一言語はアセンブリだったかもしれないので、私は微笑まざるを得ませんでした。

もちろん、それはずっと前のことです。 最近では、40 歳以上の人であれば、最初に BASIC を学んだ可能性が高くなります。 若くなれば、Java、JavaScript、さらには C に偏り始めます。しかし、私は考えさせられました。「人はアセンブリを学ぶべきでしょうか。学ぶなら、いつするのでしょう?」

私はアセンブリ言語に詳しくありませんが、この質問に対する現代的で正当な答えを知っているかどうかはわかりません。 もちろん、たくさんのチュートリアルが見つかります (私によるものも含まれます)。 埋め込みアセンブリの数行がプログラムに大きな違いをもたらす可能性があるケースは数多くあります。 不正なコンパイラをデバッグするには、アセンブリの切断が必要になる場合もあります。 したがって、少なくとも一部の人はまだアセンブリを学ぶ必要があるようです。 そのため、いつそれを学ぶべきか、そして必然的に誰がそれを学ぶ必要があるかという問題が残ります。

私の伝統的な答えは、誰もができるだけ早くそれを学ぶべきだというものです。 でも、それは私が何年も前にそうしていたからかもしれません。 それが今日のすべての人にとって正しい答えであるかどうかはわかりません。 ただし、私は主張をします。

Javascript で郵便番号を検証するコードを書くことに満足している場合は、おそらくアセンブリを学ぶ必要はありません。 しかし、本当にトッププログラマーになりたいのであれば、遅かれ早かれその問題に直面することになるでしょう。 早期に学習することにはいくつかの利点があります。 CPU レベルで実際に何が起こっているのかを理解していれば、C のポインターは難しい概念ではないようです。 コンパイラーからの出力を見て、その出力が何を意味するのかを理解できることは、何か新しいことを学ぼうとするときに、多くの場合に役立ちます。

唯一の問題は、最新のアセンブリ言語が難しいことです。 CPU 命令セットは奇妙であり、アウトオブオーダー実行を行う CPU には問題があります。 さらに、再配置可能なコードやその他の詳細については、つまずきやすく、あまり知っていてもあまり役に立ちません。

したがって、方法は 2 つあります。 まず、古い CPU を選択します。 Z80、1802、または 6502 のようなものは習得するのがそれほど難しくなく、利用可能なリソースが大量にあります。 そのようなハードウェアはありませんか? 誰が気にする? エミュレータを使用します。 おそらく、ブラウザで実行され、実際のハードウェアでは利用できない優れたデバッグ機能を備えたものも見つかるでしょう。 私は何十もの CPU でプログラミングをしてきましたが、それらはどれもかなり似ています。 1802 の奇妙さを考えると、私自身は大好きですが、お勧めできないかもしれません。 一方、学ぶのは非常に簡単です。 PDP-8 または PDP-11 も他の有力な候補ですが、ミニコンピューターの動作の一部は今日ではほとんど見られません。

または、存在しないマシンを選択します。 これらのほとんどは学習用に作成されているため、それはプラスであり、それらの多くには最新のエミュレータも備わっています。 どれか一つ選ぶとしたら、Mixをお勧めします。 Knuth の本は古典的で、Mix を使用しています。 これらはすべての人に影響を与えたので、これまでに触れたすべてのコンピューター システムにクヌースのアイデアの反響が見られるでしょう。 (少なくとも、それは量子コンピューターではありません。)

ただ、あまり後ろに戻りすぎないでください。 EDSAC、TUTAC、または 4004 のプログラミングは、おそらく現代のコンピューティングをまったく表していません。 正直なところ、これらの CPU はどれもそうではありません。 ただし、必要に応じて、より高度なプロセッサに取り組むための準備を整えるのに役立ちます。 古い格言のように、歩く前には這い、走る前には歩まなければなりません。

相手側との議論も簡単にできます。 リンクされたリストを作成するためにポインタが必要な理由と、条件付きジャンプが必要な理由を理解すると、アセンブリ言語の理解がさらに深まるかもしれません。 しばらくプログラミングをしたことがある人であれば、16 進数やアドレスなどのいくつかの概念はすでに馴染みのあるものかもしれません。

ただし、それを学ぶのにおそらく不適切な時期は、解決できないバグがあり、コンパイラーがコードを間違って最適化しているのではないかと疑うときです。 あるいは、締め切り前の真夜中に、コードから余分な部分を少しだけ削除する必要があるとき。