6. Instruction Set

6์žฅ Instruction Set ๊ฐœ์š”

ARM Cortex-M0์˜ Thumb Instruction Set์„ ์ข…๋ฅ˜๋ณ„๋กœ ์ •๋ฆฌํ•œ๋‹ค. Data processing, Load/Store, Branch, Control flow ๋“ฑ ์นดํ…Œ๊ณ ๋ฆฌ์™€ ๊ฐ ๋ช…๋ น์–ด์˜ ๋ฌธ๋ฒ• ๋ฐ encoding์„ ๋‹ค๋ฃฌ๋‹ค.

Thumb Instruction Set ๋ถ„๋ฅ˜

ARM Cortex-M0๋Š” ๋‹ค์Œ ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋ช…๋ น์–ด๋ฅผ ์ง€์›:

  1. Data processing: ADD, SUB, MUL, AND, ORR, EOR, CMP, MOV
  2. Data transfer (Load/Store): LDR, STR, LDRB, STRB, LDRH, STRH, LDM, STM
  3. Branch: B, BL, BX, BLX
  4. System: SVC, WFI, WFE, DSB, DMB, ISB, MRS, MSR

Data Processing Instructions

Register-Register

  • ADD Rd, Rn, Rm: Rd = Rn + Rm
  • SUB Rd, Rn, Rm: Rd = Rn - Rm
  • ADC Rd, Rn: Rd = Rd + Rn + C
  • SBC Rd, Rn: Rd = Rd - Rn - ยฌC

Register-Immediate

  • ADD Rd, #imm: Rd = Rd + imm (0~255 for Rd=R0~R7)
  • SUB Rd, #imm: Rd = Rd - imm
  • MOV Rd, #imm: Rd = imm
  • CMP Rd, #imm: flags๋งŒ set

Logical

  • AND Rd, Rn: Rd = Rd AND Rn
  • ORR Rd, Rn: Rd = Rd OR Rn
  • EOR Rd, Rn: Rd = Rd XOR Rn (exclusive OR)
  • BIC Rd, Rn: Rd = Rd AND NOT Rn
  • MVN Rd, Rn: Rd = NOT Rn
  • TST Rn, Rm: flags๋งŒ set (AND)

Shift

  • LSL Rd, Rn, #imm: Logical shift left
  • LSR Rd, Rn, #imm: Logical shift right
  • ASR Rd, Rn, #imm: Arithmetic shift right (sign-extend)
  • ROR Rd, Rn: Rotate right

Multiply

  • MUL Rd, Rn: Rd = Rd ร— Rn (32-bit, lower 32-bit only)
  • Single-cycle or 32-cycle multiplier (์˜ต์…˜)

Data Processing

Load/Store Instructions

ARM์€ load/store architecture โ€” ๋ฉ”๋ชจ๋ฆฌ์™€ register ๊ฐ„ ์ „์†ก์€ LDR/STR๋กœ๋งŒ.

Basic

  • LDR Rt, [Rn, #imm]: Rt = mem[Rn + imm] (word, 32-bit)
  • STR Rt, [Rn, #imm]: mem[Rn + imm] = Rt
  • LDRB Rt, [Rn, #imm]: byte load (zero-extended)
  • STRB Rt, [Rn, #imm]: byte store
  • LDRH Rt, [Rn, #imm]: halfword load
  • STRH Rt, [Rn, #imm]: halfword store
  • LDRSB, LDRSH: signed byte/halfword load

Register Offset

  • LDR Rt, [Rn, Rm]: Rt = mem[Rn + Rm]

Multiple Load/Store

  • LDMIA Rn!, {Rlist}: Rn์—์„œ ์‹œ์ž‘, reg list์— ์ˆœ์ฐจ load, Rn update
  • STMIA Rn!, {Rlist}: ์ €์žฅ ๋ฒ„์ „
  • PUSH {Rlist}: Stack์— push (STMDB SP!, {Rlist})
  • POP {Rlist}: Stack์—์„œ pop (LDMIA SP!, {Rlist})

PC-Relative Load

  • LDR Rt, [PC, #imm]: ์ƒ์ˆ˜ ํ…Œ์ด๋ธ” ๋กœ๋“œ

Load/Store

Branch Instructions

Unconditional Branch

  • B label: PC = label (ยฑ2 KB)
  • BL label: LR PC+4, PC label (ยฑ16 MB) โ€” function call
  • BX Rm: PC = Rm (register indirect, Thumb/ARM state switch)
  • BLX Rm: LR PC+4, PC Rm

Conditional Branch

  • B{cond} label: condition true์ผ ๋•Œ๋งŒ branch
  • BEQ, BNE, BCS/BHS, BCC/BLO, BMI, BPL, BVS, BVC
  • BHI, BLS, BGE, BLT, BGT, BLE

Return from Subroutine

  • BX LR: return from function (LR์— ์ €์žฅ๋œ ์ฃผ์†Œ๋กœ)
  • POP {PC}: PC๋ฅผ stack์—์„œ ๋ณต์›

Branch

System Instructions

  • SVC #imm: Supervisor Call (OS service)
  • WFI: Wait For Interrupt (sleep)
  • WFE: Wait For Event
  • SEV: Send Event
  • DMB: Data Memory Barrier
  • DSB: Data Synchronization Barrier
  • ISB: Instruction Synchronization Barrier

Status Register Access

  • MRS Rd, <reg>: Read special register (APSR, IPSR, EPSR, MSP, PSP, PRIMASK, CONTROL)
  • MSR <reg>, Rn: Write special register

System ๋ช…๋ น์–ด

Miscellaneous

  • NOP: No Operation (pipeline bubble)
  • BKPT #imm: Breakpoint (debug)
  • YIELD: Multi-threading hint
  • REV Rd, Rn: Reverse byte order in word (endian swap)
  • REV16, REVSH: halfword ๋‹จ์œ„ swap

์ƒ์ˆ˜ ์„ค์ •

  • 32-bit ์ƒ์ˆ˜๋Š” MOVS + LDR [PC, ...] ๋˜๋Š” ์—ฌ๋Ÿฌ ๋ช…๋ น์–ด๋กœ ์กฐ๋ฆฝ
  • Thumb-2์—์„œ๋Š” MOVW/MOVT๋กœ 16-bit์”ฉ ๋กœ๋“œ

์˜ˆ์‹œ

MOV R0, #0x12       ; R0 = 0x12
LSL R0, R0, #24     ; R0 = 0x12000000
ADD R0, #0x34       ; R0 = 0x12000034

๋˜๋Š” LDR pseudo-instruction:

LDR R0, =0x12345678   ; assembler๊ฐ€ literal pool ์ƒ์„ฑ

Constants ๋ฐ ์˜ˆ์ œ

Encoding Format

Thumb 16-bit ๋ช…๋ น์–ด๋Š” opcode + register fields + immediate๋กœ ๊ตฌ์„ฑ.

์˜ˆ: ADD R0, R1, R2 encoding:

  • opcode[15:9]: 0001100
  • Rm[8:6]: R2
  • Rn[5:3]: R1
  • Rd[2:0]: R0

32-bit Thumb-2 ๋ช…๋ น์–ด๋Š” 2๊ฐœ์˜ 16-bit word๋กœ ๊ตฌ์„ฑ, ์ฒซ word์˜ ์ƒ์œ„ 5-bit๊ฐ€ 11101, 11110, ๋˜๋Š” 11111์ด๋ฉด 32-bit์ž„์„ ๋‚˜ํƒ€๋ƒ„.

์ •๋ฆฌ

์นดํ…Œ๊ณ ๋ฆฌ ์˜ˆ
Data processing ADD, SUB, MUL, AND, ORR, LSL, LSR
Load/Store LDR, STR, PUSH, POP, LDMIA, STMIA
Branch B, BL, BX, B{cond}
System SVC, WFI, DMB, MRS, MSR
Misc NOP, BKPT, REV

ARM Cortex-M0์˜ Thumb ๋ช…๋ น์–ด๋Š” ๋‹จ์ˆœํ•˜๊ณ  ๊ณ ์ • ๊ธธ์ด (16-bit) ๋ผ์„œ decode๊ฐ€ ์‰ฝ๊ณ  ์ฝ”๋“œ ํšจ์œจ์ด ์ข‹๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ์ž„๋ฒ ๋””๋“œ ์ฝ”๋“œ๊ฐ€ ์ด ๋ช…๋ น์–ด ์ง‘ํ•ฉ๋งŒ์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค.

Encoding ์˜ˆ

๋น„์Šทํ•œ ๊ธ€ ์ถ”์ฒœ

Comments (0)

No comments yet. Be the first to comment!