[Arm64] MOV命令

レジスタに格納されているデータを別のレジスタに格納

SP-汎用レジスタ間

    MOV     Wd|WSP, Wn|WSP  // ADD Wd|WSP, Wn|WSP, #0 の別名
    MOV     Xd|SP, Xn|SP    // ADD Xd|SP, Xn|SP, #0 の別名

汎用レジスタ間

    MOV     Wd, Wm          // ORR Wd, WZR, Wm の別名
    MOV     Xd, Xm          // ORR Xd, XZR, Xm の別名

定数

    // x0  <-- 0x0123456789ABCDEF
    movz    x0, #0xCDEF
    movk    x0, #0x89AB, LSL #16
    movk    x0, #0x4567, LSL #32
    movk    x0, #0x0123, LSL #48

ビットマスクイミディエート

    MOV     Wd|WSP, #imm   // ORR Wd|WSP, WZR, #imm の別名
    MOV     Xd|SP, #imm    // ORR Xd|SP, XZR, #imm の別名

MOVK

    MOVK  Wd, #imm16 {,LSL #shift}
    MOVK  Xd, #imm16 {,LSL #shift}

16 ビットの定数をビット反転してレジスタに設定

  MOVN Wd, #uimm16 {,LSL #shift}
  MOVN Xd, #uimm16 {,LSL #shift} 

16 ビットの定数をビット反転してレジスタに設定
命令エンコードはzが1ならば64ビットレジスタ、sft は 0, 16, 32, 48 のシフト量に対応

レジスタに定数を設定する MOV命令は、定数値によりアセンブラが ORR、MOVZ、MOVN、MOVK を選択して使う