RealView® Compilation Tools 어셈블러 설명서

버전 4.0


Table of Contents

서문
설명서 정보
대상 독자
설명서 사용
표기 규칙
추가 정보
사용자 의견
RealView Compilation Tools에 대한 사용자 의견
설명서에 대한 사용자 의견
1. 소개
1.1. RealView Compilation Tools 어셈블러 개요
1.1.1. ARM 어셈블리 언어
1.1.2. Wireless MMX 기술 명령어
1.1.3. NEON 기술
1.1.4. 예제 사용
2. ARM 어셈블리 언어 작성
2.1. 소개
2.1.1. 코드 예제
2.2. ARM 아키텍처 개요
2.2.1. 아키텍처 버전
2.2.2. ARM, Thumb, Thumb-2 및 Thumb-2EE 명령어 세트
2.2.3. ARM, Thumb 및 ThumbEE 상태
2.2.4. 프로세서 모드
2.2.5. 레지스터
2.2.6. 명령어 세트 개요
2.2.7. 명령어 기능
2.3. 어셈블리 언어 모듈의 구조
2.3.1. 어셈블리 언어 소스 파일 레이아웃
2.3.2. ARM 어셈블리 언어 모듈 예제
2.3.3. 서브루틴 호출
2.4. 조건부 실행
2.4.1. ALU 상태 플래그
2.4.2. 조건부 실행
2.4.3. 조건부 실행 사용
2.4.4. 조건부 실행 사용 예제
2.4.5. Q 플래그
2.5. 레지스터에 상수 로드
2.5.1. MOV 및 MVN을 통한 직접 로드
2.5.2. MOV32를 사용하여 로드
2.5.3. LDR Rd, =const를 통한 직접 로드
2.5.4. 부동 소수점 상수 로드
2.6. 레지스터에 주소 로드
2.6.1. ADR 및 ADRL을 통한 직접 로드
2.6.2. LDR Rd, =label을 통한 주소 로드
2.7. 다중 레지스터 로드 및 저장 명령어
2.7.1. ARM 및 Thumb-2에서 사용할 수 있는 다중 로드 및 저장 명령어
2.7.2. LDM 및 STM을 통한 스택 구현
2.7.3. LDM 및 STM을 통한 블록 복사
2.8. 매크로 사용
2.8.1. 테스트 및 분기 매크로 예제
2.8.2. 부호 없는 정수 나누기 매크로 예제
2.9. 기호 버전 추가
2.10. 프레임 지시어 사용
2.11. 어셈블리 언어 변경 사항
3. 어셈블러 참조
3.1. 명령 구문
3.1.1. 사용 가능한 옵션 목록 보기
3.1.2. 환경 변수를 통한 명령 행 옵션 지정
3.1.3. AAPCS
3.1.4. 부동 소수점 모델
3.1.5. CPU 이름
3.1.6. FPU 이름
3.1.7. 메모리 액세스 특성
3.1.8. SET 지시어 사전 실행
3.1.9. 긴 LDM 및 STM 분할
3.1.10. 파일에 출력 나열
3.1.11. 프로젝트 템플릿 옵션
3.1.12. 진단 메시지의 출력 제어
3.1.13. 예외 테이블 생성 제어
3.2. 소스 행 형식
3.3. 미리 정의된 레지스터 및 보조 프로세서 이름
3.3.1. 미리 선언된 레지스터 이름
3.3.2. 미리 선언된 확장 레지스터 이름
3.3.3. 미리 선언된 XScale 레지스터 이름
3.3.4. 미리 선언된 보조 프로세서 이름
3.4. 기본 제공 변수 및 상수
3.4.1. armasm 버전 검색
3.5. 기호
3.5.1. 기호 명명 규칙
3.5.2. 변수
3.5.3. 숫자 상수
3.5.4. 변수의 어셈블리 타임 대체
3.5.5. 레이블
3.5.6. 지역 레이블
3.6. 식, 리터럴 및 연산자
3.6.1. 문자열 식
3.6.2. 문자열 리터럴
3.6.3. 숫자 식
3.6.4. 숫자 리터럴
3.6.5. 부동 소수점 리터럴
3.6.6. 레지스터 기준 및 프로그램 기준 식
3.6.7. 논리 식
3.6.8. 논리 리터럴
3.6.9. 연산자 우선순위
3.6.10. 단항 연산자
3.6.11. 바이너리 연산자
3.7. 진단 메시지
3.7.1. 인터럭
3.7.2. IT 블록 생성
3.7.3. Thumb 분기 타겟 정렬
3.8. C 사전 처리기 사용
4. ARM 및 Thumb 명령어
4.1. 명령어 요약
4.2. 메모리 액세스 명령어
4.2.1. 주소 정렬
4.2.2. LDR 및 STR (즉치 오프셋)
4.2.3. LDR 및 STR (레지스터 오프셋)
4.2.4. LDR 및 STR (사용자 모드)
4.2.5. LDR (pc 기준)
4.2.6. ADR
4.2.7. PLD, PLDW 및 PLI
4.2.8. LDM 및 STM
4.2.9. PUSH 및 POP
4.2.10. RFE
4.2.11. SRS
4.2.12. LDREX 및 STREX
4.2.13. CLREX
4.2.14. SWP 및 SWPB
4.3. 일반 데이터 처리 명령어
4.3.1. 유연한 두 번째 피연산자
4.3.2. ADD, SUB, RSB, ADC, SBC 및 RSC
4.3.3. SUBS pc, lr
4.3.4. AND, ORR, EOR, BIC 및 ORN
4.3.5. CLZ
4.3.6. CMP 및 CMN
4.3.7. MOV 및 MVN
4.3.8. MOVT
4.3.9. TST 및 TEQ
4.3.10. SEL
4.3.11. REV, REV16, REVSH 및 RBIT
4.3.12. ASR, LSL, LSR, ROR 및 RRX
4.3.13. SDIV 및 UDIV
4.4. 곱하기 명령어
4.4.1. MUL, MLA 및 MLS
4.4.2. UMULL, UMLAL, SMULL 및 SMLAL
4.4.3. SMULxy 및 SMLAxy
4.4.4. SMULWy 및 SMLAWy
4.4.5. SMLALxy
4.4.6. SMUAD{X} 및 SMUSD{X}
4.4.7. SMMUL, SMMLA 및 SMMLS
4.4.8. SMLAD 및 SMLSD
4.4.9. SMLALD 및 SMLSLD
4.4.10. UMAAL
4.4.11. MIA, MIAPH 및 MIAxy
4.5. 포화 명령어
4.5.1. 포화 산술
4.5.2. QADD, QSUB, QDADD 및 QDSUB
4.5.3. SSAT 및 USAT
4.6. 병렬 명령어
4.6.1. 병렬 더하기 및 빼기
4.6.2. USAD8 및 USADA8
4.6.3. SSAT16 및 USAT16
4.7. 패킹 및 패킹 해제 명령어
4.7.1. BFC 및 BFI
4.7.2. SBFX 및 UBFX
4.7.3. SXT, SXTA, UXT 및 UXTA
4.7.4. PKHBT 및 PKHTB
4.8. 분기 및 제어 명령어
4.8.1. B, BL, BX, BLX 및 BXJ
4.8.2. IT
4.8.3. CBZ 및 CBNZ
4.8.4. TBB 및 TBH
4.9. 보조 프로세서 명령어
4.9.1. CDP 및 CDP2
4.9.2. MCR, MCR2, MCRR 및 MCRR2
4.9.3. MRC, MRC2, MRRC 및 MRRC2
4.9.4. LDC, LDC2, STC 및 STC2
4.10. 기타 제한
4.10.1. BKPT
4.10.2. SVC
4.10.3. MRS
4.10.4. MSR
4.10.5. CPS
4.10.6. SMC
4.10.7. SETEND
4.10.8. NOP, SEV, WFE, WFI 및 YIELD
4.10.9. DBG, DMB, DSB 및 ISB
4.10.10. MAR 및 MRA
4.11. Thumb에서 명령어 너비 선택
4.11.1. 명령어 너비 지정자, .W 및 .N
4.11.2. 일부 명령어의 다른 동작
4.11.3. 진단 경고
4.12. ThumbEE 명령어
4.12.1. ENTERX 및 LEAVEX
4.12.2. CHKA
4.12.3. HB, HBL, HBLP 및 HBP
4.13. 의사 명령어
4.13.1. ADRL 의사 명령어
4.13.2. MOV32 의사 명령어
4.13.3. LDR 의사 명령어
4.13.4. UND 의사 명령어
5. NEON 및 VFP 프로그래밍
5.1. 명령어 요약
5.1.1. NEON 명령어
5.1.2. 공유 NEON 및 VFP 명령어
5.1.3. VFP 명령어
5.2. NEON 및 VFP에 대한 아키텍처 지원
5.2.1. 반정밀도 확장
5.3. 확장 레지스터 뱅크
5.3.1. 레지스터 뱅크의 NEON 뷰
5.3.2. 확장 레지스터 뱅크의 VFP 표시
5.4. 조건 코드
5.5. 일반 정보
5.5.1. 부동 소수점 예외
5.5.2. NEON 및 VFP 데이터 형식
5.5.3. NEON의 Normal, Long, Wide, Narrow 및 포화 명령어
5.5.4. NEON 스칼라
5.5.5. 확장 표시
5.5.6. {0,1}을 통한 다항식 산술
5.5.7. VFP 보조 프로세서
5.6. NEON 및 VFP 공유 명령어
5.6.1. VLDR 및 VSTR
5.6.2. VLDM, VSTM, VPOP 및 VPUSH
5.6.3. VMOV (두 개의 ARM 레지스터와 확장 레지스터 간 전송)
5.6.4. VMOV (ARM 레지스터와 NEON 스칼라 간 전송)
5.6.5. VMOV (한 ARM 레지스터와 단정밀도 VFP 간 전송)
5.6.6. VMRS 및 VMSR
5.7. NEON 논리 및 비교 연산
5.7.1. VAND, VBIC, VEOR, VORN 및 VORR (레지스터)
5.7.2. VBIC 및 VORR (즉치값)
5.7.3. VBIF, VBIT 및 VBSL
5.7.4. VMOV, VMVN (레지스터)
5.7.5. VACGE 및 VACGT
5.7.6. VCEQ, VCGE, VCGT, VCLE 및 VCLT
5.7.7. VTST
5.8. NEON 일반 데이터 처리 명령어
5.8.1. VCVT (고정 소수점 또는 정수와 부동 소수점 간 변환)
5.8.2. VCVT (반정밀도 부동 소수점과 단정밀도 부동 소수점 간에 변환)
5.8.3. VDUP
5.8.4. VEXT
5.8.5. VMOV, VMVN (즉치값)
5.8.6. VMOVL, V{Q}MOVN, VQMOVUN
5.8.7. VREV
5.8.8. VSWP
5.8.9. VTBL, VTBX
5.8.10. VTRN
5.8.11. VUZP, VZIP
5.9. NEON 시프트 명령어
5.9.1. VSHL, VQSHL, VQSHLU 및 VSHLL (즉치값 기준)
5.9.2. V{Q}{R}SHL (부호 있는 변수 기준)
5.9.3. V{R}SHR{N}, V{R}SRA (즉치값 기준)
5.9.4. VQ{R}SHR{U}N (즉치값 기준)
5.9.5. VSLI 및 VSRI
5.10. NEON 일반 산술 명령어
5.10.1. VABA{L} 및 VABD{L}
5.10.2. V{Q}ABS 및 V{Q}NEG
5.10.3. V{Q}ADD, VADDL, VADDW, V{Q}SUB, VSUBL 및 VSUBW
5.10.4. V{R}ADDHN 및 V{R}SUBHN
5.10.5. V{R}HADD 및 VHSUB
5.10.6. VPADD{L}, VPADAL
5.10.7. VMAX, VMIN, VPMAX 및 VPMIN
5.10.8. VCLS, VCLZ 및 VCNT
5.10.9. VRECPE 및 VRSQRTE
5.10.10. VRECPS 및 VRSQRTS
5.11. NEON 곱하기 명령어
5.11.1. VMUL{L}, VMLA{L} 및 VMLS{L}
5.11.2. VMUL{L}, VMLA{L} 및 VMLS{L} (스칼라 기준)
5.11.3. VQDMULL, VQDMLAL 및 VQDMLSL (벡터 기준 또는 스칼라 기준)
5.11.4. VQ{R}DMULH (벡터 기준 또는 스칼라 기준)
5.12. NEON 요소 및 구조체 로드/저장 명령어
5.12.1. 인터리브
5.12.2. 요소 및 구조체 로드와 저장 명령어의 정렬에 대한 제한
5.12.3. VLDn 및 VSTn (단일 n-요소 구조체를 하나의 레인에 로드)
5.12.4. VLDn (단일 n-요소 구조체를 모든 레인에 로드)
5.12.5. VLDn 및 VSTn (여러 n-요소 구조체)
5.13. NEON 및 VFP 의사 명령어
5.13.1. VLDR 의사 명령어
5.13.2. VLDR 및 VSTR (사후 증가 및 사전 감소)
5.13.3. VMOV2
5.13.4. VAND 및 VORN (즉치값)
5.13.5. VACLE 및 VACLT
5.13.6. VCLE 및 VCLT
5.14. NEON 및 VFP 시스템 레지스터
5.14.1. FPSCR, 부동 소수점 상태 및 제어 레지스터
5.14.2. FPEXC, 부동 소수점 예외 레지스터
5.14.3. FPSID, 부동 소수점 시스템 ID 레지스터
5.14.4. NEON 및 VFP 시스템 레지스터의 개별 비트 수정
5.15. 0으로 플러시 모드
5.15.1. 0으로 플러시 모드를 사용할 경우
5.15.2. 0으로 플러시 모드의 사용에 따른 영향
5.15.3. 0으로 플러시 모드의 영향을 받지 않는 연산
5.16. VFP 명령어
5.16.1. VABS, VNEG 및 VSQRT
5.16.2. VADD, VSUB 및 VDIV
5.16.3. VMUL, VMLA, VMLS, VNMUL, VNMLA 및 VNMLS
5.16.4. VCMP
5.16.5. VCVT (단정밀도와 배정밀도 간 변환)
5.16.6. VCVT (부동 소수점과 정수 간 변환)
5.16.7. VCVT (부동 소수점과 고정 소수점 간 변환)
5.16.8. VCVTB, VCVTT (반정밀도 확장)
5.16.9. VMOV
5.17. VFP 벡터 모드
5.17.1. 레지스터 뱅크
5.17.2. 벡터
5.17.3. VFP 벡터 및 스칼라 연산
5.17.4. VFP 지시어 및 벡터 표시
6. Wireless MMX 기술 명령어
6.1. 소개
6.2. Wireless MMX 기술에 대한 ARM 지원
6.2.1. 레지스터
6.2.2. WRN 및 WCN 지시문
6.2.3. 프레임 지시문
6.2.4. Wireless MMX 로드 및 저장 명령어
6.2.5. Wireless MMX 기술 및 XScale 명령어
6.3. Wireless MMX 명령어
6.3.1. 의사 명령어
7. 지시어 참조
7.1. 지시어의 사전순 목록
7.2. 기호 정의 지시어
7.2.1. GBLA, GBLL 및 GBLS
7.2.2. LCLA, LCLL 및 LCLS
7.2.3. SETA, SETL 및 SETS
7.2.4. RELOC
7.2.5. RN
7.2.6. RLIST
7.2.7. CN
7.2.8. CP
7.2.9. QN, DN 및 SN
7.3. 데이터 정의 지시어
7.3.1. LTORG
7.3.2. MAP
7.3.3. FIELD
7.3.4. SPACE 또는 FILL
7.3.5. DCB
7.3.6. DCD 및 DCDU
7.3.7. DCDO
7.3.8. DCFD 및 DCFDU
7.3.9. DCFS 및 DCFSU
7.3.10. DCI
7.3.11. DCQ 및 DCQU
7.3.12. DCW 및 DCWU
7.3.13. COMMON
7.3.14. DATA
7.4. 어셈블리 제어 지시어
7.4.1. 중첩 지시어
7.4.2. MACRO 및 MEND
7.4.3. MEXIT
7.4.4. IF, ELSE, ENDIF 및 ELIF
7.4.5. WHILE 및 WEND
7.5. 프레임 지시어
7.5.1. FRAME ADDRESS
7.5.2. FRAME POP
7.5.3. FRAME PUSH
7.5.4. FRAME REGISTER
7.5.5. FRAME RESTORE
7.5.6. FRAME RETURN ADDRESS
7.5.7. FRAME SAVE
7.5.8. FRAME STATE REMEMBER
7.5.9. FRAME STATE RESTORE
7.5.10. FRAME UNWIND ON
7.5.11. FRAME UNWIND OFF
7.5.12. FUNCTION 또는 PROC
7.5.13. ENDFUNC 또는 ENDP
7.6. 보고 지시어
7.6.1. ASSERT
7.6.2. INFO
7.6.3. OPT
7.6.4. TTL 및 SUBT
7.7. 명령어 세트 및 구문 선택 지시어
7.7.1. ARM, THUMB, THUMBX, CODE16 및 CODE32
7.8. 기타 지시어
7.8.1. ALIGN
7.8.2. AREA
7.8.3. ATTR
7.8.4. END
7.8.5. ENTRY
7.8.6. EQU
7.8.7. EXPORT 또는 GLOBAL
7.8.8. EXPORTAS
7.8.9. GET 또는 INCLUDE
7.8.10. IMPORT 및 EXTERN
7.8.11. INCBIN
7.8.12. KEEP
7.8.13. NOFP
7.8.14. REQUIRE
7.8.15. REQUIRE8 및 PRESERVE8
7.8.16. ROUT

List of Tables

2.1. ARM 프로세서 모드
2.2. 조건 코드 접미사
2.3. 주기 수 (조건부 분기에만 해당)
2.4. 주기 수 (모든 조건부 명령어에 해당)
2.5. ARM 상태 즉치 상수 (8비트)
2.6. MOV 명령어의 ARM 상태 즉치 상수
2.7. Thumb-2 즉치 상수
2.8. MOV 명령어의 Thumb-2 즉치 상수
2.9. 스택 지향 접미사 및 해당 주소 지정 모드 접미사
2.10. 다중 로드 및 저장 명령어의 접미사
2.11. 이전 ARM 어셈블리 언어의 변경 사항
2.12. 필요 조건 완화
2.13. UAL 이전 Thumb 구문과 UAL 구문 간의 차이점
3.1. 진단 메시지의 심각도
3.2. 기본 제공 변수
3.3. 기본 제공 bool 상수
3.4. armasm의 연산자 우선순위
3.5. C의 연산자 우선순위
3.6. 문자열을 반환하는 단항 연산자
3.7. 숫자 또는 논리 값을 반환하는 단항 연산자
3.8. 곱하기 연산자
3.9. 문자열 조작 연산자
3.10. 시프트 연산자
3.11. 더하기, 빼기 및 논리 연산자
3.12. 관계 연산자
3.13. 부울 연산자
3.14. 명령 행 옵션
3.15. armcc와 동등한 명령 행 옵션
4.1. 명령어 위치
4.2. 오프셋 및 아키텍처, LDR/STR, 워드, 하프워드 및 바이트
4.3. 옵션 및 아키텍처, LDR/STR (레지스터 오프셋)
4.4. 오프셋 및 아키텍처, LDR/STR (사용자 모드)
4.5. pc 기준 오프셋
4.6. pc 기준 오프셋
4.7. 분기 명령어 사용 가능 여부 및 범위
4.8. expr의 범위 및 인코딩
5.1. NEON 명령어 위치
5.2. 공유 NEON 및 VFP 명령어 위치
5.3. VFP 명령어 위치
5.4. 조건 코드
5.5. NEON 데이터 유형
5.6. VFP 데이터 유형
5.7. NEON 포화 범위
5.8. 즉치 상수 패턴
5.9. 사용할 수 있는 상수
5.10. 범위를 벗어난 입력 결과
5.11. 범위를 벗어난 입력 결과
5.12. 허용된 매개변수 조합
5.13. 허용된 매개변수 조합
5.14. 허용된 매개변수 조합
5.15. UAL 이전의 VFP 니모닉
5.16. 부동 소수점 상수 값
6.1. 상태 및 제어 레지스터
6.2. Wireless MMX 기술 명령어
6.3. Wireless MMX 기술 의사 명령어
7.1. 지시어 위치
7.2. OPT 지시어 설정값

소유권 고지 사항

이 소유권 고지 사항의 아래 부분에서 달리 명시되지 않는 한 ® 또는 ™ 표시가 있는 단어와 로고는 EU, 대한민국 및 기타 국가에서 ARM Limited의 등록 상표 또는 상표입니다. 이 설명서에 언급된 기타 브랜드와 이름은 해당 소유자의 상표일 수 있습니다.

이 설명서에 포함된 전체 또는 일부 정보나 설명된 제품은 해당 저작권 소유자의 사전 서면 승인 없이는 어떤 형태로도 개조되거나 복제될 수 없습니다.

이 설명서에 설명된 제품은 지속적으로 개발 및 개선될 수 있습니다. 이 설명서에 포함된 모든 제품 명세와 해당 사용법은 ARM의 신뢰하에 제공됩니다. 그러나 ARM에서는 상품성 또는 특정 목적에의 적합성을 비롯하여 그 밖의 묵시적이거나 명시적인 모든 보증을 부인합니다.

이 설명서는 제품 사용자를 지원하는 용도로만 만들어졌습니다. ARM은 이 설명서 정보의 사용, 정보의 오류나 누락 또는 제품의 잘못된 사용에 따른 어떠한 손실이나 손상도 책임지지 않습니다.

ARM이라는 단어가 사용되는 경우 "ARM이나 해당하는 자회사"를 의미합니다.

기밀 상태

이 설명서는 기밀 문서가 아닙니다. 이 설명서의 사용, 복사 및 공개 권한은 ARM과 설명서 사용 당사자의 동의하에 라이센스 제한을 받습니다.

액세스 제한 없음은 ARM의 내부 분류입니다.

제품 상태

이 설명서의 정보는 개발이 완료된 제품에 대한 최종 정보입니다.

Revision History
Revision A2002년 8월릴리스 1.2
Revision B2003년 1월릴리스 2.0
Revision C2003년 9월RealView Development Suite 버전 2.0용 릴리스 2.0.1
Revision D2004년 1월RealView Development Suite 버전 2.1용 릴리스 2.1
Revision E2004년 12월RealView Development Suite 버전 2.2용 릴리스 2.2
Revision F2005년 5월RealView Development Suite 버전 2.2 SP1용 릴리스 2.2
Revision G2006년 3월RealView Development Suite 버전 3.0용 릴리스 3.0
Revision H2007년 3월RealView Development Suite 버전 3.1용 릴리스 3.1
Revision I2008년 9월RealView Development Suite 버전 4.0용 릴리스 4.0
Copyright © 2002-2008 ARM Limited. All rights reserved.ARM DUI 0204IK
Non-Confidential