アセンブリ日記 (0) 機械と会話せよ
読み飛ばしていい前書き
ああ、機械と直で会話したいのに、対話できる手段がない。一般的なプログラミング言語じゃ心を通わせている気分になれない。
そう思ったことはありませんか?(無いですね)
そこで我々はアマゾンの奥地に行きたいところですが、既に直で対話できるかつ、人間にも読みやすい言語が存在します!その名も「アセンブリ(諸説あり)」これで安心ですね!
しかし、我々の安泰な機械との対話に大きな壁が立ちはだかります。そう、プログラミング言語のごとくアセンブリにも種類があるのです。
しかも、CPUの種類が増えるごとにアセンブリの種類も増える。また同じような単語なのに全然違う記法になったりと覚えるだけ無駄な世界だということを念頭に置いといてください。。
まあ今そんな話しても仕方ないので、急がば回れに習ってコツコツ環境構築から行きましょう。
最近はAIが発展しているおかげで本記事が過去の遺産になってしまっても、環境構築にあまり躓かなくて済むでしょう。
(自分はvimを使ってますが、手順に違いはありません)
自分の環境
-
Windows11 in WSL(Ubuntu)
-
neovim (vim最高)
-
CPUアーキテクチャ: x86_64 (ARMの人たちは本記事に対応してません。ごめんね)
環境構築偏
まず「アセンブラ」を入れます。アセンブラはアセンブリをコンパイラするものという理解でいいです。悲しいですが、アセンブラにも種類があって記法が個々に違います、気が滅入りますが今後すべて極めていきたいですね。
今回はnasmを使います。基本的にアセンブリはLinuxまたはWSL推奨しています。
sudo apt update
sudo apt install nasm
nasm -v
hello.asmファイルを作成して編集します。
section .data
msg db "hello", 0xA
len equ $ - msg
section .text
global _start
_start:
mov rax, 1
mov rdi, 1
mov rsi, msg
mov rdx, len
syscall
mov rax, 60
xor rdi, rdi
syscall
アセンブル(アセンブリにアセンブラをかけること)します
nasm -f elf64 hello.asm -o hello.o
このhello.oファイルが出力ファイルになりますが、このままだと実行可能ファイルになってないのでリンクというのを噛ませます。ホチキスで留める感覚ですね(?)
ld hello.o -o hello
これで実行ファイルができあがりました。また編集して実行させたいなら、アセンブルしてリンクという手順を踏んでください。
おわりに
お疲れ様でした~!
アセンブリはハッキリ言って参考になるサイトが見つからなくて修羅の道です。しかし、この何もない(需要もほぼない)道を探索するのはワクワクします。
でも誰か教えてほしいですね。
Discussion