Skip to the content.

S

← 전체 목차로 돌아가기


SB

✅ Speculation Barrier. Prevents the CPU from speculatively executing instructions past this point until all earlier instructions have architecturally completed - a stronger, dedicated barrier against speculative-execution side channels (e.g. as a mitigation for Spectre-class issues), cheaper than a full DSB+ISB pair on cores that implement it.

✅ 추측 실행 배리어. 이전 명령어들이 아키텍처적으로 완전히 끝날 때까지, 이 지점 이후 명령어의 추측 실행을 막습니다. 추측 실행 사이드채널(Spectre류 취약점 완화 등)을 막기 위한 전용 배리어로, 이를 지원하는 코어에서는 DSB+ISB 조합보다 저렴합니다.

Syntax

SB

Example

CMP X0, X1
B.LO safe_path
SB              // 잘못된 분기 예측으로 인한 추측 실행 차단
safe_path:

🔗

SBC

✅ Subtract with Carry (borrow). Subtracts the second operand and the inverted carry flag from the first (Xd = Xn - Xm - NOT(C)). Used to chain subtraction across multiple registers for values wider than 64 bits.

✅ 캐리(빌림)를 포함한 뺄셈. 첫 번째 피연산자에서 두 번째 피연산자와 반전된 캐리 플래그를 뺍니다(Xd = Xn - Xm - NOT(C)). 64비트보다 큰 값을 여러 레지스터에 걸쳐 뺄 때 사용합니다.

Syntax

SBC <Wd|Xd>, <Wn|Xn>, <Wm|Xm>

Example

SUBS X0, X2, X4   // 하위 64비트 빼기 (캐리 플래그 갱신)
SBC  X1, X3, X5   // 상위 64비트 - 빌림 -> 128비트 뺄셈 완성

🔗

SBCS

✅ Subtract with Carry, setting flags. Same as SBC but also updates the NZCV flags, allowing the borrow chain to continue further.

✅ 캐리(빌림)를 포함한 뺄셈 후 플래그 설정. SBC와 동일하지만 NZCV 플래그도 갱신하여 빌림 체인을 계속 이어갈 수 있습니다.

Syntax

SBCS <Wd|Xd>, <Wn|Xn>, <Wm|Xm>

Example

SBCS X1, X3, X5

🔗

SBFX

✅ Signed Bitfield Extract. Extracts a bitfield of a given width starting at a given bit position, and sign-extends it to fill the destination register.

✅ 부호 있는 비트필드 추출. 지정한 시작 비트 위치에서 지정한 폭만큼 비트를 뽑아내어, 대상 레지스터 전체에 부호 확장하여 채웁니다.

Syntax

SBFX <Wd|Xd>, <Wn|Xn>, #<lsb>, #<width>

Example

SBFX X0, X1, #4, #8   // X1의 4~11번 비트(8비트)를 뽑아 부호확장

🔗

SCVTF

✅ Signed integer Convert to Floating-point. Converts a signed integer register value to a floating-point value in the destination register.

✅ 부호 있는 정수를 부동소수점으로 변환합니다. 부호 있는 정수 레지스터 값을 부동소수점 값으로 변환하여 대상 레지스터에 저장합니다.

Syntax

SCVTF <Sd|Dd>, <Wn|Xn>

Example

SCVTF D0, X0

🔗

SDIV

✅ Signed Divide. Divides the first operand by the second (signed) and writes the quotient to the destination register (result truncates toward zero).

✅ 부호 있는 나눗셈. 첫 번째 피연산자를 두 번째 피연산자로(부호 있는 연산으로) 나눈 몫을 대상 레지스터에 저장합니다(0 방향으로 잘림 처리).)

Syntax

SDIV <Wd|Xd>, <Wn|Xn>, <Wm|Xm>

Example

SDIV X0, X1, X2

🔗

SEV

✅ Send Event. Signals an event to all cores, waking up any core that is currently sleeping in a WFE instruction.

✅ 이벤트 전송. 모든 코어에 이벤트를 신호로 보내, WFE로 대기 중인 다른 코어를 깨웁니다.

Syntax

SEV

Example

SEV   // 락 해제 후 대기 중인 다른 코어를 깨움

🔗

SHA1C

✅ SHA1 Hash update (choose). Advances the SHA-1 hash state by one set of rounds using the ‘choose’ round function, combining the current hash state, message schedule words, and a round constant.

✅ SHA1 해시 갱신(choose 함수). 현재 해시 상태, 메시지 스케줄 워드, 라운드 상수를 결합하여 ‘choose’ 라운드 함수로 SHA-1 해시 상태를 한 묶음의 라운드만큼 진행시킵니다.

Syntax

SHA1C <Qd>, <Sn>, <Vm>.4S

Example

SHA1C Q0, S1, V2.4S

🔗

SHA1H

✅ SHA1 Fixed Rotate. Performs the fixed 30-bit rotation used internally by the SHA-1 algorithm on a single 32-bit lane.

✅ SHA1 고정 회전. SHA-1 알고리즘 내부에서 사용되는 고정된 30비트 회전을 단일 32비트 레인에 대해 수행합니다.

Syntax

SHA1H <Sd>, <Sn>

Example

SHA1H S0, S1

🔗

SHA1SU0

✅ SHA1 Schedule Update 0. Performs the first stage of computing the next set of SHA-1 message schedule words from earlier ones.

✅ SHA1 스케줄 갱신 0단계. 이전 메시지 스케줄 워드들로부터 다음 스케줄 워드를 계산하는 첫 번째 단계를 수행합니다.

Syntax

SHA1SU0 <Vd>.4S, <Vn>.4S, <Vm>.4S

Example

SHA1SU0 V0.4S, V1.4S, V2.4S

🔗

SHA1SU1

✅ SHA1 Schedule Update 1. Performs the second stage of computing the next set of SHA-1 message schedule words, completing what SHA1SU0 started.

✅ SHA1 스케줄 갱신 1단계. SHA1SU0에서 시작한 다음 메시지 스케줄 워드 계산의 두 번째 단계를 완료합니다.

Syntax

SHA1SU1 <Vd>.4S, <Vn>.4S

Example

SHA1SU1 V0.4S, V1.4S

🔗

SHA256H

✅ SHA256 Hash update, part 1. Advances the first half of the SHA-256 hash state by one set of rounds, combining the current state, message schedule words, and round constants.

✅ SHA256 해시 갱신 1부. 현재 해시 상태, 메시지 스케줄 워드, 라운드 상수를 결합하여 SHA-256 해시 상태의 앞쪽 절반을 한 묶음의 라운드만큼 진행시킵니다.

Syntax

SHA256H <Qd>, <Qn>, <Vm>.4S

Example

SHA256H Q0, Q1, V2.4S

🔗

SHA256H2

✅ SHA256 Hash update, part 2. Advances the second half of the SHA-256 hash state, completing what SHA256H started for the same set of rounds.

✅ SHA256 해시 갱신 2부. 같은 라운드 묶음에 대해 SHA256H가 시작한 SHA-256 해시 상태의 나머지 절반을 진행시킵니다.

Syntax

SHA256H2 <Qd>, <Qn>, <Vm>.4S

Example

SHA256H2 Q0, Q1, V2.4S

🔗

SHA256SU0

✅ SHA256 Schedule Update 0. Performs the first stage of computing the next set of SHA-256 message schedule words from earlier ones.

✅ SHA256 스케줄 갱신 0단계. 이전 메시지 스케줄 워드들로부터 다음 스케줄 워드를 계산하는 첫 번째 단계를 수행합니다.

Syntax

SHA256SU0 <Vd>.4S, <Vn>.4S

Example

SHA256SU0 V0.4S, V1.4S

🔗

SHA256SU1

✅ SHA256 Schedule Update 1. Performs the second stage of computing the next set of SHA-256 message schedule words, completing what SHA256SU0 started.

✅ SHA256 스케줄 갱신 1단계. SHA256SU0에서 시작한 다음 메시지 스케줄 워드 계산의 두 번째 단계를 완료합니다.

Syntax

SHA256SU1 <Vd>.4S, <Vn>.4S, <Vm>.4S

Example

SHA256SU1 V0.4S, V1.4S, V2.4S

🔗

SMAXV

✅ Signed Maximum across Vector. Finds the largest signed value among all lanes and writes it to the destination.

✅ 벡터 전체 중 최댓값(부호 있음). 모든 레인 중 가장 큰 부호 있는 값을 찾아 대상에 씁니다.

Syntax

SMAXV <V><d>, <Vn>.<T>

Example

SMAXV S0, V1.4S

🔗

SMC

✅ Secure Monitor Call. Triggers a synchronous exception routed to EL3 (secure monitor firmware), used to request services from firmware such as PSCI (power-state control - CPU on/off, system reset) on real hardware.

✅ 시큐어 모니터 호출. EL3(시큐어 모니터 펌웨어)로 향하는 동기 예외를 발생시킵니다. 실제 하드웨어에서 PSCI(전원 상태 제어 - CPU 켜기/끄기, 시스템 리셋 등) 같은 펌웨어 서비스를 요청할 때 사용합니다.

Syntax

SMC #<imm16>

Example

SMC #0      // 펌웨어(PSCI 등)에 서비스 요청, 인자는 X0-X3 관례 사용

🔗

SMINV

✅ Signed Minimum across Vector. Finds the smallest signed value among all lanes and writes it to the destination.

✅ 벡터 전체 중 최솟값(부호 있음). 모든 레인 중 가장 작은 부호 있는 값을 찾아 대상에 씁니다.

Syntax

SMINV <V><d>, <Vn>.<T>

Example

SMINV S0, V1.4S

🔗

SMOV

✅ Signed Move (vector to general-purpose register). Copies one lane of a vector into a general-purpose register, sign-extending it. Use this instead of UMOV when the lane holds a signed value.

✅ 벡터 레인을 범용 레지스터로 이동(부호 있음). 벡터의 한 레인 값을 부호 확장하여 범용 레지스터에 저장합니다. 레인 값이 부호 있는 값일 때는 UMOV 대신 이걸 씁니다.

Syntax

SMOV <Rd>, <Vn>.<Ts>[<index>]

Example

SMOV X0, V0.B[3]   // signed byte 레인을 64비트로 부호 확장하며 꺼냄

🔗

SMULH

✅ Signed Multiply High. Multiplies two signed 64-bit values and writes only the UPPER 64 bits of the full 128-bit product into the destination register. Used together with a plain MUL (for the lower bits) to implement 128-bit signed multiplication.

✅ 부호 있는 곱셈 상위비트. 두 개의 부호 있는 64비트 값을 곱한 전체 128비트 결과 중 상위 64비트만 대상 레지스터에 저장합니다. 하위 비트를 담당하는 일반 MUL과 함께 써서 128비트 곱셈을 구현할 때 사용합니다.

Syntax

SMULH <Xd>, <Xn>, <Xm>

Example

MUL   X0, X1, X2   // 128비트 곱셈 결과의 하위 64비트
SMULH X3, X1, X2   // 128비트 곱셈 결과의 상위 64비트

🔗 Open Summary

SMULL

✅ Signed Multiply Long. Multiplies two signed 32-bit values (from Wn, Wm) and writes the full, non-truncated 64-bit product into the 64-bit destination register. Avoids the overflow that plain MUL (Wd, Wn, Wm) would cause.

✅ 부호 있는 긴 곱셈. 두 개의 부호 있는 32비트 값(Wn, Wm)을 곱한 결과를 잘리지 않은 온전한 64비트 값으로 64비트 대상 레지스터에 저장합니다. 일반 MUL(Wd,Wn,Wm)에서 발생할 수 있는 오버플로를 피할 수 있습니다.

Syntax

SMULL <Xd>, <Wn>, <Wm>

Example

SMULL X0, W1, W2   // 32비트 x 32비트 -> 64비트 (오버플로 없음)

🔗 Open Summary

SQADD

✅ Signed saturating Add (vector). Adds per-lane like ADD, but clamps (saturates) the result at the signed range’s max/min instead of wrapping around on overflow. Essential for audio mixing, where wraparound would produce ugly clicks/pops.

✅ 부호 있는 포화 덧셈(벡터). ADD처럼 레인별로 더하되, 오버플로 시 값이 넘어가 버리는 대신 부호 있는 범위의 최댓값/최솟값에서 멈춥니다(포화). 오디오 믹싱에서 오버플로로 인한 지지직거리는 클리핑 잡음을 막기 위해 필수적입니다.

Syntax

SQADD <Vd>.<T>, <Vn>.<T>, <Vm>.<T>

Example

SQADD V0.8H, V1.8H, V2.8H   // 오디오 샘플 합성 시 클리핑 방지

🔗

SQSUB

✅ Signed saturating Subtract (vector). Subtracts per-lane like SUB, but clamps the result at the signed range’s max/min instead of wrapping around on underflow.

✅ 부호 있는 포화 뺄셈(벡터). SUB처럼 레인별로 빼되, 언더플로 시 값이 넘어가 버리는 대신 부호 있는 범위에서 멈춥니다.

Syntax

SQSUB <Vd>.<T>, <Vn>.<T>, <Vm>.<T>

Example

SQSUB V0.8H, V1.8H, V2.8H

🔗

ST1

✅ Store single 1-element structures (or a plain vector). The store counterpart of LD1 - writes a vector register straight to contiguous memory, no interleaving.

✅ 단일(비인터리브) 구조체 저장. LD1의 반대 동작으로, 벡터 레지스터 내용을 채널을 섞지 않고 연속된 메모리에 그대로 씁니다.

Syntax

ST1 { <Vt>.<T> }, [<Xn|SP>]

Example

ST1 { V0.16B }, [X1]

🔗

ST2

✅ Store 2-element interleaved structures. The store counterpart of LD2 - takes two vector registers and interleaves them back into memory (e.g. re-interleaving separate L/R buffers into a stereo stream).

✅ 2개 원소 인터리브 구조체 저장. LD2의 반대 동작으로, 두 벡터 레지스터를 다시 인터리브하여 메모리에 씁니다 (예: 분리된 L/R 버퍼를 스테레오 스트림으로 재조합).

Syntax

ST2 { <Vt>.<T>, <Vt2>.<T> }, [<Xn|SP>]

Example

ST2 { V0.8H, V1.8H }, [X1]

🔗

ST3

✅ Store 3-element interleaved structures. The store counterpart of LD3 - interleaves three vector registers (e.g. R, G, B channels) back into memory as packed triplets.

✅ 3개 원소 인터리브 구조체 저장. LD3의 반대 동작으로, R/G/B 세 벡터 레지스터를 다시 섞어서 메모리에 씁니다.

Syntax

ST3 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T> }, [<Xn|SP>]

Example

ST3 { V0.16B, V1.16B, V2.16B }, [X1]

🔗

ST4

✅ Store 4-element interleaved structures. The store counterpart of LD4 - interleaves four vector registers (e.g. R, G, B, A channels) back into memory as packed quadruplets.

✅ 4개 원소 인터리브 구조체 저장. LD4의 반대 동작으로, R/G/B/A 네 벡터 레지스터를 다시 섞어서 메모리에 씁니다.

Syntax

ST4 { <Vt>.<T>, <Vt2>.<T>, <Vt3>.<T>, <Vt4>.<T> }, [<Xn|SP>]

Example

ST4 { V0.16B, V1.16B, V2.16B, V3.16B }, [X1]

🔗

STLXR

✅ Store-Release Exclusive Register. Same as STXR, but additionally acts as a memory barrier: no earlier memory access by this core can be reordered after this store (release semantics). Used together with LDAXR to implement correctly-ordered locks and lock-free data structures.

✅ 해제(Release) 배타적 레지스터 저장. STXR과 동일하게 동작하지만, 추가로 메모리 배리어 역할을 합니다: 이 코어의 이전 메모리 접근이 이 저장보다 뒤로 재배치될 수 없습니다(해제 의미론). 순서가 보장된 락이나 락 프리 자료구조를 구현할 때 LDAXR과 짝을 이뤄 사용합니다.

Syntax

STLXR <Ws>, <Wt|Xt>, [<Xn|SP>]

Example

STLXR W1, X0, [X19]  // 스핀락 해제 루틴 등에서 사용, W1 = 상태(0=성공)

🔗

STP

✅ Store Pair of Registers. Stores two words or doublewords to consecutive memory locations in a single instruction. Commonly used to save callee-saved registers / FP+LR in prologues.

✅ 레지스터 쌍을 저장합니다. 두 레지스터의 값을 연속된 메모리 위치에 한 번에 씁니다. 함수 프롤로그에서 callee-saved 레지스터나 FP+LR을 저장할 때 흔히 사용됩니다.

Syntax

STP <Wt1|Xt1>, <Wt2|Xt2>, [<Xn|SP>, #<imm>]!
STP <Wt1|Xt1>, <Wt2|Xt2>, [<Xn|SP>], #<imm>

Example

STP x29, x30, [sp, #-48]!
STP X19, X20, [SP, #16]

🔗 Open Summary

STR

✅ Store Register. Stores a word or doubleword from a register into memory.

✅ 레지스터 값을 메모리에 저장합니다. 레지스터의 워드 또는 더블워드를 메모리에 씁니다.

Syntax

STR <Wt|Xt>, [<Xn|SP>], #<simm>
STR <Wt|Xt>, [<Xn|SP>, #<pimm>]

Example

STR X0, [X1]
STR W2, [SP, #8]

🔗 Open Summary

STRB

✅ Store Register Byte. Stores the low 8 bits of the source register into a single byte in memory; the upper bits of the register are ignored.

✅ 레지스터 바이트를 저장합니다. 소스 레지스터의 하위 8비트를 메모리의 1바이트에 씁니다. 레지스터의 상위 비트는 무시됩니다.

Syntax

STRB <Wt>, [<Xn|SP>], #<simm>
STRB <Wt>, [<Xn|SP>, #<pimm>]

Example

STRB W0, [X1]        // char 하나 저장
STRB WZR, [X19]      // 문자열 끝에 NUL('\0') 쓰기

🔗 Open Summary

STRH

✅ Store Register Halfword. Stores the low 16 bits of the source register into a halfword in memory; the upper bits of the register are ignored.

✅ 레지스터 하프워드를 저장합니다. 소스 레지스터의 하위 16비트를 메모리의 하프워드(2바이트)에 씁니다. 레지스터의 상위 비트는 무시됩니다.

Syntax

STRH <Wt>, [<Xn|SP>], #<simm>
STRH <Wt>, [<Xn|SP>, #<pimm>]

Example

STRH W0, [X1]        // short 값 저장

🔗 Open Summary

STUR

✅ Store Register (Unscaled offset). Stores a word/doubleword to memory using a raw byte offset that does NOT need to be a multiple of the transfer size, unlike the offset used by STR.

✅ 레지스터를 저장합니다 (정렬 제약 없는 오프셋). STR과 달리 오프셋이 전송 크기의 배수일 필요가 없는, 임의의 바이트 오프셋으로 메모리에 값을 씁니다.

Syntax

STUR <Wt|Xt>, [<Xn|SP>, #<simm>]

Example

STUR X0, [X1, #-8]   // 음수 오프셋도 자유롭게 사용 가능

🔗

STXR

✅ Store Exclusive Register. Attempts to store a value to the address previously loaded with LDXR, but only succeeds if no other core has written to that address in the meantime. Writes a status code (0 = success, 1 = failure) to a separate result register; on failure the caller must retry the whole LDXR/STXR pair in a loop.

✅ 배타적(Exclusive) 레지스터 저장. LDXR으로 읽었던 주소에 값을 쓰려고 시도하되, 그 사이에 다른 코어가 같은 주소를 건드리지 않았을 때만 성공합니다. 별도의 결과 레지스터에 상태 코드(0=성공, 1=실패)를 씁니다. 실패하면 호출자는 LDXR/STXR 쌍 전체를 루프로 다시 시도해야 합니다.

Syntax

STXR <Ws>, <Wt|Xt>, [<Xn|SP>]

Example

// 원자적 증가(atomic increment) 예시
.L_retry:
    LDXR X0, [X19]        // 현재 값 배타적으로 읽기
    ADD  X0, X0, #1        // 값 + 1
    STXR W1, X0, [X19]     // 배타적으로 쓰기 시도, W1 = 상태(0=성공)
    CBNZ W1, .L_retry       // 실패했으면(다른 코어가 끼어들었으면) 재시도

🔗

SUB

✅ Subtract (register or immediate). Subtracts the second operand from the first operand.

✅ 뺄셈 (레지스터 또는 즉시값). 두 번째 피연산자를 첫 번째 피연산자에서 뺍니다.

Syntax

SUB <Wd|Xd>, <Wn|Xn>, <Wm|Xm>  or  SUB <Wd|Xd>, <Wn|Xn>, #<imm>

Example

SUB X0, X1, X2
SUB W0, W1, #4

🔗

SUBS

✅ Subtract, setting flags. Same as SUB but also updates the NZCV condition flags. This is the underlying instruction CMP is an alias of (CMP = SUBS with discarded destination).

✅ 뺄셈 후 플래그 설정. SUB와 동일하게 빼지만 NZCV 조건 플래그도 함께 갱신합니다. CMP가 바로 이 명령어의 별칭입니다(결과를 버리는 SUBS).

Syntax

SUBS <Wd|Xd>, <Wn|Xn>, <Wm|Xm>  or  SUBS <Wd|Xd>, <Wn|Xn>, #<imm>

Example

SUBS X0, X1, #1
B.LT underflow_label

🔗

SVC

✅ Supervisor Call. Triggers an exception that transfers control to the operating system kernel, typically used to invoke a system call.

✅ 슈퍼바이저 호출. 운영체제 커널로 제어를 넘기는 예외를 발생시킵니다. 일반적으로 시스템 콜을 호출할 때 사용됩니다.

Syntax

SVC #<imm>

Example

SVC #0x80   // 커널에 시스템 콜 요청 (플랫폼별 규약 상이)

🔗 Open Summary

SWP

✅ Atomic Swap. Atomically loads the value at a memory address into Ws while storing Wt into that address, in a single instruction — no comparison needed.

✅ 원자적 교환. 메모리 주소의 값을 Ws로 읽어옴과 동시에 그 주소에 Wt를 저장합니다 — 비교 과정 없이 명령어 하나로 완료됩니다.

Syntax

SWP <Ws>, <Wt>, [<Xn|SP>]

Example

SWP W0, W1, [X19]   // 이전 값 -> W0, 새 값 W1 저장

🔗 Open Summary

SXTB

✅ Sign-Extend Byte. Sign-extends the low 8 bits of the source register to the destination register width. The value itself does not change, only its bit-width representation (used to safely widen a signed 8-bit value stored in a wider register).

✅ 바이트를 부호 확장합니다. 소스 레지스터의 하위 8비트를 대상 레지스터 폭으로 부호 확장합니다. 값 자체는 바뀌지 않고 비트 폭 표현만 늘어납니다 (더 넓은 레지스터에 저장된 부호 있는 8비트 값을 안전하게 확장할 때 쓰입니다).

Syntax

SXTB <Xd>, <Wn>

Example

SXTB X20, W19

🔗 Open Summary

SXTH

✅ Sign-Extend Halfword. Sign-extends the low 16 bits of the source register to the destination register width. Commonly used right after loading a signed 16-bit (short) value that was stored in a narrower memory location.

✅ 하프워드(16비트)를 부호 확장합니다. 소스 레지스터의 하위 16비트를 대상 레지스터 폭으로 부호 확장합니다. 좁은 메모리 공간에 저장돼 있던 부호 있는 16비트(short) 값을 로드한 직후에 흔히 사용됩니다.

Syntax

SXTH <Xd>, <Wn>

Example

SXTH X0, W1

🔗 Open Summary

SXTL

✅ Signed extend Long (vector widen). Sign-extends each element in the lower half of a vector to double its width, producing a full-width result vector (e.g. 8x8-bit -> 8x16-bit). Used to widen data before doing arithmetic that would otherwise overflow.

✅ 부호 확장하며 폭 넓히기(벡터). 벡터 하위 절반의 각 원소를 부호를 유지한 채 두 배 폭으로 확장하여, 폭이 넓은 결과 벡터를 만듭니다(예: 8비트 8개 -> 16비트 8개). 그대로 연산하면 오버플로될 값을, 먼저 넓혀두고 계산할 때 씁니다.

Syntax

SXTL <Vd>.<Ta>, <Vn>.<Tb>

Example

SXTL V0.8H, V1.8B   // signed 8비트 8개 -> signed 16비트 8개로 확장

🔗 Open Summary

SXTW

✅ Sign-Extend Word. Sign-extends the low 32 bits of the source register to 64 bits and writes the result to the destination register.

✅ 워드를 부호 확장합니다. 소스 레지스터의 하위 32비트를 부호 확장하여 64비트로 만든 뒤 대상 레지스터에 저장합니다.

Syntax

SXTW <Xd>, <Wn>

Example

SXTW X0, W1

🔗 Open Summary