目次
- 対象読者
- この記事を読んで得られるもの
- intel記法とAT&T記法
- オペコードの接尾辞
- leaとmovの違い
- おすすめ文献
- 参考文献
対象読者
- アセンブリ初心者
- とりあえずアセンブリに関する知識が欲しい人
- x64アーキテクチャに興味がある人
- mov、add、オペコード、オペランドのような超基礎的なことは知っている人
この記事を読んで得られるもの
- アセンブリの基礎的な知識
intel記法とAT&T記法
アセンブリには、intel記法とAT&T記法の2種類の表記法があります。これら2つの記法は、使う記号とオペコードの表記が異なっていたり、オペランドの順番が逆になっていたりします。
以下のコードは2つの記法で5
をeax
に代入する処理を書いたものです。
intel記法
mov eax, 5
AT&T記法
movl $5, %eax
英語wikiに違いが載っています。
オペコードの接尾辞
- b (=byte) : オペランドのメモリサイズは1byte
- w (=word) : オペランドのメモリサイズは2byte
- l (=long) : オペランドのメモリサイズは4byte
- q (=quadword) : オペランドのメモリサイズは8byte
movq %rax, %rbx
movzbl %al, %ebx ;movzのように2つの接尾辞を持つものもあります。
leaとmovの違い
leaとmovは両方、アセンブリでは頻出で、<何か>
を<場所>
に入れるという操作を行います。
mov A, B ;アドレスBの値(もしくは定数B)をアドレスAに入れる
lea A, B ;アドレスBをアドレスAに入れる
;例
mov [A], B ;アドレスBの値(もしくは定数B)をアドレスAの値が指すアドレスに入れる。
lea A, [B] ;アドレスBの値が指すアドレスをアドレスAに入れる。
mov [ebx+04], eax ;eaxの値をアドレスebx+4hに入れる
lea ecx, [ebp-10] ;ebp-10hの値が指すアドレスをecxに入れる
おすすめ文献
どのように関数が実行されるかが分かる。
r/mやimmなど、知っていると役に立つ用語の説明。
参考文献