x64での即値MOV

  • (by K, 2019.10.30

(1)

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

こめんと欄


コメントお名前NameLink

リロード   新規 編集 差分 添付   トップ 一覧 検索 最終更新 バックアップ   ヘルプ   最終更新のRSS
Last-modified: 2019-10-30 (水) 17:17:02 (22d)