⚔️
習得アセンブリ 64bitレジスタの巻
86_64の汎用レジスタ偏
頭文字rであれば64bitレジスタである。

後に言うのも何ですが、これらの役割は「絶対」ではないので注意してください。(環境によって変わる)
最後が戻り値(rax)に帰るようになっていれば途中はなんでもいいとのこと。
覚えていたほうがいいのはrax, rbx, rcx, rdxらしい。
予習:スタック
- caller保存とcallee保存
- caller保存は壊してもいいもの :
rax, rcx, rdx, rsi, rdi, r8~r11 - callee保存は守る義務 :
rbx, rbp, r12~r15
これらが全てです。それ以上でもそれ以下でもありません。
- caller保存は壊してもいいもの :
caller = 呼ぶ側, 自分で関数呼び出しの前後で"値を維持したいレジスタの中身"(別の関数内で値が書き変わってしまう危険性あり)
mov rax, 10 ; この値を後でも使いたい!
call func ; この関数内でraxという文字列があった場合上のやつが書き換えられてしまう(つまりほぼ確実に書き換えられますね)
callee = 呼ばれる側, 「関数の中」で保存がおきる。
まとめ
レジスタは全員で使っている共有メモ帳です
上のようにraxがcaller保存で関数の中に入ってきたら好きに壊していいですよと。
rbxはcallee保存であり関数内で使うなら元に戻す義務があります。
Discussion