* x64での即値MOV -(by [[K]], 2019.10.30 ** (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レジスタに代入できる。 * こめんと欄 #comment