M
✅ Multiply-Add. Multiplies two registers, adds a third, and writes the result to the destination register: Xd = Xa + (Xn * Xm).
✅ 곱셈-덧셈. 두 레지스터를 곱한 뒤 세 번째 레지스터를 더하여 결과를 저장합니다: Xd = Xa + (Xn * Xm).
Syntax
MADD <Wd|Xd>, <Wn|Xn>, <Wm|Xm>, <Wa|Xa>
Example
MADD X0, X1, X2, X3 // X0 = X3 + (X1 * X2)
✅ Multiply-Add (vector). Per-lane: Vd = Vd + (Vn * Vm). Used to accumulate a running sum of products, e.g. in FIR filters or dot products, without a separate add step.
✅ 벡터 곱셈-덧셈. 레인별로 Vd = Vd + (Vn * Vm)을 계산합니다. FIR 필터나 내적처럼 곱한 값을 계속 누적할 때, 덧셈을 따로 안 해도 되게 해줍니다.
Syntax
MLA <Vd>.<T>, <Vn>.<T>, <Vm>.<T>
Example
MLA V0.4S, V1.4S, V2.4S // V0 += V1 * V2 (4개 32비트 레인 동시에)
✅ Multiply-Subtract (vector). Per-lane: Vd = Vd - (Vn * Vm).
✅ 벡터 곱셈-뺄셈. 레인별로 Vd = Vd - (Vn * Vm)을 계산합니다.
Syntax
MLS <Vd>.<T>, <Vn>.<T>, <Vm>.<T>
Example
MLS V0.4S, V1.4S, V2.4S
✅ Move register or immediate value. Copies the value of the source operand to the destination register.
✅ 레지스터 또는 즉시값을 이동합니다. 원본 피연산자의 값을 대상 레지스터로 복사합니다.
Syntax
MOV <Wd|Xd>, <Wn|Xn> or MOV <Wd|Xd>, #<imm>
Example
MOV X0, X1
MOV W2, #10
✅ Move (Keep others). Writes a 16-bit immediate into a specified 16-bit slot of the destination register WITHOUT touching the other bits. Used after MOVZ to fill in the remaining 16-bit chunks of a full 64-bit constant.
✅ 상수 이동 (나머지는 유지). 16비트 즉치값을 대상 레지스터의 지정한 16비트 구간에만 쓰고, 나머지 비트는 그대로 유지합니다. MOVZ 이후에 이어서 써서 64비트 상수의 나머지 조각들을 채울 때 사용합니다.
Syntax
MOVK <Wd|Xd>, #<imm16>{, LSL #<shift>}
Example
MOVZ X0, #0x0004, LSL #0 // X0 = 0x0000000000000004
MOVK X0, #0x1234, LSL #16 // X0 = 0x0000000012340004 (하위 16비트는 유지)
✅ Move (Not). Writes the bitwise complement of a shifted 16-bit immediate into the destination register. Useful for efficiently loading constants that consist mostly of 1 bits (e.g. small negative numbers).
✅ 상수 이동(반전). 시프트된 16비트 즉치값의 비트 반전 값을 대상 레지스터에 씁니다. 대부분 비트가 1로 채워진 상수(예: 작은 음수)를 효율적으로 만들 때 사용합니다.
Syntax
MOVN <Wd|Xd>, #<imm16>{, LSL #<shift>}
Example
MOVN X0, #0 // X0 = NOT(0) = 0xFFFFFFFFFFFFFFFF (-1)
✅ Move (Zero others). Writes a 16-bit immediate into a specified 16-bit slot of the destination register, and clears all other bits to zero. Typically the FIRST instruction when building a large 64-bit constant piece by piece.
✅ 상수 이동(나머지는 0으로). 16비트 즉치값을 대상 레지스터의 지정한 16비트 구간에 쓰고, 나머지 비트는 전부 0으로 채웁니다. 큰 64비트 상수를 조각조각 조립할 때 보통 첫 번째로 사용하는 명령어입니다.
Syntax
MOVZ <Wd|Xd>, #<imm16>{, LSL #<shift>}
Example
MOVZ X0, #0x1234, LSL #16 // X0 = 0x0000000012340000
✅ Move from System Register. Reads a special/system register’s value into a general-purpose register (e.g. reading NZCV or a hardware counter).
✅ 시스템 레지스터에서 이동. 특수/시스템 레지스터(예: NZCV, 하드웨어 카운터)의 값을 범용 레지스터로 읽어옵니다.
Syntax
MRS <Xt>, <system_reg>
Example
MRS X0, NZCV
🔗 [Open Summary]
✅ Move to System Register. Writes a general-purpose register’s value into a special/system register (e.g. NZCV, control/status registers).
✅ 시스템 레지스터로 이동. 범용 레지스터의 값을 특수/시스템 레지스터(예: NZCV, 제어/상태 레지스터)에 씁니다.
Syntax
MSR <system_reg>, <Xt>
Example
MSR NZCV, X0
🔗 [Open Summary]
✅ Multiply-Subtract. Multiplies two registers, subtracts the product from a third, and writes the result to the destination register: Xd = Xa - (Xn * Xm).
✅ 곱셈-뺄셈. 두 레지스터를 곱한 값을 세 번째 레지스터에서 빼서 결과를 저장합니다: Xd = Xa - (Xn * Xm).
Syntax
MSUB <Wd|Xd>, <Wn|Xn>, <Wm|Xm>, <Wa|Xa>
Example
MSUB X0, X1, X2, X3 // X0 = X3 - (X1 * X2)
✅ Multiply. Multiplies two registers and writes the (truncated) result to the destination register. Alias for MADD with a zero addend.
✅ 곱셈. 두 레지스터를 곱한 결과(잘림 처리됨)를 대상 레지스터에 저장합니다. 덧셈 항이 0인 MADD의 별칭입니다.
Syntax
MUL <Wd|Xd>, <Wn|Xn>, <Wm|Xm>
Example
MUL X0, X1, X2
✅ Bitwise NOT (Move Not). Inverts every bit of the source operand and writes the result to the destination register.
✅ 비트 단위 NOT(Move Not). 원본 피연산자의 모든 비트를 반전시켜 결과를 대상 레지스터에 저장합니다.
Syntax
MVN <Wd|Xd>, <Wn|Xn>
Example
MVN X0, X1