x64での即値MOV
(1)
- なんかNASMにMOV命令をアセンブルさせていたら、見慣れない機械語が出てきた。
- とりあえず、RAXに即値を代入するケースに注目する。
RAX=0 | B8 00 00 00 00 | 64bitモードで32bitレジスタに代入すると自動でゼロ拡張されるらしいから、これで合っているのだろう | RAX=0x1234 | B8 34 12 00 00 | 同上 | RAX=0x0123456789ABCDEF | 48 B8 EF CD AB 89 67 45 23 01 | これは普通 | RAX=-1 | 48 C7 C0 FF FF FF FF | REX.W C7 /0 は、imm32を符号拡張してくれるらしい | RAX=0 | 31 C0 | フラグを汚してもいいのならこれで行ける | RAX=-1 | 48 83 c8 FF | フラグを汚してもいいのならこれで行ける |
- このほかにも、もし16本のレジスタのうちの一つを0で固定してもよければ(ゼロレジスタにしてもよければ)、LEAを使って4バイト命令長で-128から+127を64bitレジスタに代入できる。
こめんと欄
|