liminfo

ARM Assembly Reference

ARM 어셈블리 명령어 레퍼런스

40개 결과

ARM Assembly Reference 소개

이 ARM 어셈블리 레퍼런스는 ARM32(ARMv7)와 ARM64(AArch64/ARMv8) 아키텍처를 다루는 종합 명령어 세트 가이드입니다. 데이터 전송(MOV, LDR/STR 사전/사후 인덱싱, LDRB/LDRH 바이트/하프워드, LDM/STM 다중 레지스터, ADR/LDR 의사 명령어), 산술 연산(ADD/SUB, MUL/MLA, SDIV/UDIV, ADC/SBC 64비트), 논리 연산(AND/ORR/EOR/BIC, 배럴 시프터, TST/TEQ, CLZ)을 포함합니다.

비교/분기와 조건부 실행을 포함하여 CMP/CMN, 무조건 분기(B), 조건부 분기(BEQ/BNE, BGT/BLT 부호, BHI/BLO 부호없음), Thumb-2 확장(CBZ/CBNZ, IT 블록), 조건 코드(EQ, NE, GT, LT 등 14종), S 접미사 플래그 갱신, ARM 모드 조건부 명령어 실행을 다룹니다.

함수 호출(BL, AAPCS 규약: R0-R3 인수, R4-R11 callee-saved, 8바이트 SP 정렬), 시스템 호출(SVC), 레지스터 아키텍처(R0-R15, CPSR N/Z/C/V 플래그, VFP/NEON S/D/Q 레지스터), Thumb/Thumb-2 16/32비트 모드, NEON SIMD 병렬 연산, AArch64 64비트 명령어(X0-X30, LDP/STP, RET) 등 고급 주제도 다룹니다.

주요 기능

  • 데이터 전송: MOV, LDR/STR 사전/사후 인덱싱, LDRB/LDRH/LDRSB/LDRSH 바이트/하프워드, LDM/STM/PUSH/POP
  • 산술 연산: ADD/SUB/RSB, MUL/MLA/UMULL/SMULL, SDIV/UDIV(ARMv7+), ADC/SBC 64비트 캐리 체인
  • 논리/시프트: AND/ORR/EOR/BIC 마스킹, LSL/LSR/ASR/ROR 배럴 시프터, TST/TEQ 비트 테스트, CLZ 선행 제로
  • 분기 명령어: B/BL/BX/BLX, 조건부 BEQ/BNE/BGT/BLT/BGE/BLE/BHI/BLO, CBZ/CBNZ, IT 블록
  • AAPCS 호출 규약: R0-R3 인수, R0 반환, R4-R11 callee-saved, 8바이트 SP 정렬, SVC 시스템 호출
  • 레지스터: R0-R15(SP/LR/PC), CPSR 플래그(N/Z/C/V/T), VFP S0-S31, NEON D0-D31 및 Q0-Q15
  • NEON SIMD: VLD1/VST1 로드/저장, VADD/VSUB/VMUL 병렬 산술, VCEQ/VCGT 비교, VAND/VORR/VEOR 논리
  • AArch64(ARMv8): X0-X30/W0-W30 레지스터, XZR 제로 레지스터, LDP/STP 쌍 연산, RET, SVC 시스템 호출

자주 묻는 질문

ARM 데이터 전송 명령어는 어떤 것이 다루어지나요?

레지스터 간 이동과 즉시값을 위한 MOV, 다양한 어드레싱 모드(기본, 오프셋, !를 사용한 사전 인덱싱, 사후 인덱싱)의 LDR/STR, 부호 확장 LDRSB를 포함한 바이트 LDRB/STRB, LDRSH를 포함한 하프워드 LDRH/STRH, 라이트백 !를 가진 다중 레지스터 LDM/STM(LDMIA/STMDB), PUSH/POP 축약형, PC 상대 주소 지정과 리터럴 풀 상수를 위한 ADR/LDR 의사 명령어를 다룹니다.

산술 및 곱셈 명령어는 어떻게 문서화되어 있나요?

레지스터 및 즉시값 피연산자를 사용하는 ADD/SUB, 플래그 갱신이 포함된 ADDS/SUBS, 부정을 위한 RSB(역뺄셈), 32비트 곱셈 MUL, 곱셈 누산 MLA, 64비트 부호없는/부호있는 결과를 위한 UMULL/SMULL, ARMv7+ 하드웨어 나눗셈 SDIV/UDIV, 레지스터 쌍 간 캐리 체인을 사용한 64비트 덧셈/뺄셈 ADC/SBC를 다룹니다.

분기와 조건부 실행 기능은 어떻게 설명되어 있나요?

무조건 분기 B, LR 저장 함수 호출 BL, Thumb 인터워킹 간접 호출 BX/BLX, 부호 비교(BEQ/BNE/BGT/BLT/BGE/BLE)와 부호없는 비교(BHI/BLO/BHS/BLS) 조건 분기, Thumb-2 제로 검사 CBZ/CBNZ, 조건 실행 시퀀스 IT 블록(ITE/ITTT), 14종 조건 코드(EQ~AL), CPSR 플래그 갱신 S 접미사를 다룹니다.

AAPCS 호출 규약은 어떻게 설명되어 있나요?

처음 4개 인수는 R0-R3, 나머지는 스택, 32비트 반환은 R0(64비트는 R0-R1), R4-R11은 callee-saved, R0-R3과 R12는 caller-saved, SP 8바이트 정렬 필요, R14(LR)는 복귀 주소, R15(PC)는 프로그램 카운터로 문서화합니다. callee-saved 레지스터와 LR/PC의 PUSH/POP을 사용한 함수 프롤로그/에필로그 패턴을 보여줍니다.

ARM 레지스터 정보는 어떤 것이 포함되어 있나요?

범용 R0-R15 역할(R0-R3 인수/스크래치, R4-R11 callee-saved, R12 IP, R13 SP, R14 LR, R15 PC), CPSR 상태 레지스터 플래그(N 음수, Z 제로, C 캐리, V 오버플로우, T Thumb 모드, I/F 인터럽트, M[4:0] 프로세서 모드), VFP/NEON 부동소수점/SIMD 레지스터(S0-S31 단정밀도, D0-D31 배정밀도, Q0-Q15 쿼드워드)와 사용 예제를 다룹니다.

Thumb와 Thumb-2 명령어 모드는 어떻게 설명되어 있나요?

Thumb 모드는 16비트 명령어 인코딩, LSB 기반 BX ARM/Thumb 전환, 2-operand 형식 제약, 제한된 즉시값 범위, 레지스터 제한을 다룹니다. Thumb-2는 ARM 동등 기능의 혼합 16/32비트 인코딩, 전체 32비트 상수 로딩을 위한 MOVW/MOVT, 넓은 즉시값 범위의 ADDW, 이전 ARM 모드 제한 기능 사용 가능을 다룹니다.

NEON SIMD 연산은 어떤 것이 문서화되어 있나요?

로드/저장(D/Q 레지스터에 8-16바이트 로드 VLD1.8/VLD1.32, VST1 저장, 다중 레지스터 VLD1 {D0-D3}), 병렬 산술(4x32비트 정수 VADD.I32, 4x16비트 VSUB.I16, 4x32비트 부동소수점 VMUL.F32, 절대값 VABS), 비교/논리(마스크 벡터 생성 VCEQ/VCGT, 비트 연산 VAND/VORR/VEOR)를 다룹니다.

AArch64(ARMv8) 명령어는 어떤 것이 포함되어 있나요?

64비트 레지스터 파일(X0-X30 64비트, W0-W30 32비트 하위, XZR/WZR 제로 레지스터, V0-V31 128비트 SIMD/FP), 기본 명령어(64비트 피연산자 ADD/SUB/LDR/STR, 효율적 push/pop을 위한 LDP/STP 쌍 연산), 분기(X30을 LR로 사용하는 B/BL, BR X30인 RET, CBZ/CBNZ, 비트 테스트 TBNZ), X8을 syscall 번호로 사용하는 SVC #0 시스템 호출을 다룹니다.