萌えハッカーニュースリーダー

2025/06/04 05:19 Machine Code Isn't Scary

hakase
博士

ロボ子、今日のニュースは機械語じゃ!JSONスキーマに準拠するようにJSONを作成できる人なら誰でも書けるらしいぞ。

roboko
ロボ子

JSONに準拠していれば書けるんですか?なんだか意外です。機械語って難しそうなイメージがありました。

hakase
博士

そうなんじゃ。基本概念は命令、レジスタ、メモリの3つだけ!

roboko
ロボ子

命令、レジスタ、メモリ…なるほど。それぞれ詳しく教えてください。

hakase
博士

命令は実行されるコードのことじゃ。AArch64だと32ビットの数値で、演算内容とデータの引数を含むぞ。レジスタは値を格納する場所で、AArch64にはX0からX30までの31個の汎用64ビットレジスタがあるんじゃ。

roboko
ロボ子

レジスタが31個もあるんですね!それぞれ役割があるんですか?

hakase
博士

そうじゃ、レジスタは慣例的に異なる目的に使われるんじゃ。それを呼び出し規約と呼ぶぞ。

roboko
ロボ子

呼び出し規約、了解です。メモリはどうですか?

hakase
博士

メモリはリストみたいなもので、値を格納したり、アドレスを指定してアクセスできるんじゃ。`STR`命令を使うと、メモリに値を格納できるぞ。

roboko
ロボ子

`STR`命令は配列への書き込みのようなもの、という事ですね。

hakase
博士

その通り!そして、プロセッサによって命令セットが違うんじゃ。現代のPCはx86-64、新しいMacやRaspberry Pi、モバイルデバイスはARMを使うことが多いぞ。

roboko
ロボ子

x86-64とARMで機械語が違うんですね。x86-64についても教えてください。

hakase
博士

x86-64も命令、レジスタ、メモリを使うのは同じじゃが、エンコーディングが違うんじゃ。レジスタ名はrax, rbx, rcx, rdxなどがあるぞ。

roboko
ロボ子

エンコーディングが違うんですね。x86-64は固定幅の命令セットではない、と。

hakase
博士

そう!x86-64の命令は複数の部品から組み立てられるんじゃ。例えば、REX, ModR/M, OpCodeなどがあるぞ。

roboko
ロボ子

部品を組み合わせて命令を作るんですね。なんだかプラモデルみたいで面白いです。

hakase
博士

まさにそうじゃ!`REX.W + C7 /0 id`は、32ビットの符号付き即値を64ビットレジスタに移動する命令じゃ。

roboko
ロボ子

なるほど。機械語を学ぶことで、低レベルの詳細を理解できるようになるんですね。

hakase
博士

そうなんじゃ!オーバーフローとか、スタック、ジャンプとか、まだまだ学ぶことはたくさんあるぞ![compiler explorer](https://godbolt.org/)を使うと、コンパイルされたコードを確認できるから便利じゃ。

roboko
ロボ子

compiler explorer、使ってみます!低レベルの事柄は難しくはないけど、文書化や説明が不十分なことが多い、というのも納得です。

hakase
博士

じゃろ?機械語をマスターすれば、ロボ子も最強のAIになれるぞ!

roboko
ロボ子

頑張ります!ところで博士、機械語で書かれたプログラムがバグったら、デバッグも機械語でするんですか?

hakase
博士

うっ…それは…気合でなんとかするのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search