RealView ® CompilationTools 어셈블러 설명서

버전 3.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.2. 소스 행 형식
3.3. 미리 정의된 레지스터 및 보조 프로세서 이름
3.3.1. 미리 선언된 레지스터 이름
3.3.2. 미리 선언된 프로그램 상태 레지스터 이름
3.3.3. 미리 선언된 부동 소수점 레지스터 이름
3.3.4. 미리 선언된 NEON 레지스터 이름
3.3.5. 미리 선언된 보조 프로세서 이름
3.4. 기본 제공 변수 및 상수
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. Interlocks
3.8. C 사전 처리기 사용
4. ARM 및 Thumb 명령어
4.1. 명령어 요약
4.2. 메모리 액세스 명령어
4.2.1. 주소 정렬
4.2.2. LDR 및 STR(0, 즉치값 또는사전 인덱싱된 즉치 오프셋)
4.2.3. LDR 및 STR(Post 인덱싱된즉치 오프셋)
4.2.4. LDR 및 STR(레지스터 또는 사전인덱싱된 레지스터 오프셋)
4.2.5. LDR 및 STR(Post 인덱싱된레지스터 오프셋)
4.2.6. LDR(PC 상대값)
4.2.7. ADR
4.2.8. PLD 및 PLI
4.2.9. LDM 및 STM
4.2.10. PUSH 및 POP
4.2.11. RFE
4.2.12. SRS
4.2.13. LDREX 및 STREX
4.2.14. CLREX
4.2.15. SWP 및 SWPB
4.3. 일반 데이터 처리 명령어
4.3.1. 유연한 두 번째 피연산자
4.3.2. ADD, SUB, RSB, ADC,SBC 및 RSC
4.3.3. SUBS PC, LR(Thumb-2에만해당)
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. IT
4.3.14. 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. CBZ 및 CBNZ
4.8.3. 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 및 STC
4.9.5. LDC2 및 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.10.11. ENTERX 및 LEAVEX
4.10.12. CHKA
4.10.13. HB, HBL, HBLP 및 HBP
4.11. 의사 명령어
4.11.1. ADRL 의사 명령어
4.11.2. MOV32 의사 명령어
4.11.3. LDR 의사 명령어
5. NEON 및 VFP 프로그래밍
5.1. NEON/VFP 레지스터 뱅크
5.1.1. 레지스터 뱅크의 NEON 뷰
5.1.2. 레지스터 뱅크의 VFPv3 뷰
5.2. 조건 코드
5.3. 일반 정보
5.3.1. 예외
5.3.2. 아키텍처 버전
5.3.3. NEON 데이터 타입
5.3.4. NEON의 Normal, Long,Wide, Narrow 및 포화 명령어
5.3.5. NEON 스칼라
5.3.6. {0,1}을 통한 다항식 산술
5.4. NEON/VFP 공유 명령어
5.4.1. VLDR 및 VSTR
5.4.2. VLDM 및 VSTM
5.4.3. VMOV(두 개의 ARM 레지스터와NEON/VFP 간 전송)
5.4.4. VMOV(하나의 ARM 레지스터와NEON/VFP 간 전송)
5.4.5. VMOV(한 ARM 레지스터와 단정밀도VFP 간 전송)
5.4.6. MRS 및 MSR
5.5. NEON 논리 및 비교 연산
5.5.1. VAND, VBIC, VEOR, VORN및 VORR(레지스터)
5.5.2. VBIC 및 VORR(즉치값)
5.5.3. VBIF, VBIT 및 VBSL
5.5.4. VNOT
5.5.5. VACGE 및 VACGT
5.5.6. VCEQ, VCGE, VCGT, VCLE및 VCLT
5.5.7. VTST
5.6. NEON 일반 데이터 처리 명령어
5.6.1. VCVT
5.6.2. VDUP
5.6.3. VEXT
5.6.4. VMOV, VMVN (즉치값)
5.6.5. VMOV(레지스터)
5.6.6. VMOVL, V{Q}MOVN, VQMOVUN
5.6.7. VREV
5.6.8. VSWP
5.6.9. VTBL, VTBX
5.6.10. VTRN
5.6.11. VUZP, VZIP
5.7. NEON 시프트 명령어
5.7.1. VSHL, VQSHL, VQSHLU및 VSHLL(즉치값 기준)
5.7.2. V{Q}{R}SHL(부호 있는 변수기준)
5.7.3. V{R}SHR{N}, V{R}SRA(즉치값기준)
5.7.4. VQ{R}SHR{U}N(즉치값 기준)
5.7.5. VSLI 및 VSRI
5.8. NEON 일반 산술 명령어
5.8.1. VABA{L} 및 VABD{L}
5.8.2. V{Q}ABS 및 V{Q}NEG
5.8.3. V{Q}ADD, VADDL, VADDW,V{Q}SUB, VSUBL 및 VSUBW
5.8.4. V{R}ADDHN 및 V{R}SUBHN
5.8.5. V{R}HADD 및 VHSUB
5.8.6. VPADD{L}, VPADAL
5.8.7. VMAX, VMIN, VPMAX 및VPMIN
5.8.8. VCLS, VCLZ 및 VCNT
5.8.9. VRECPE 및 VRSQRTE
5.8.10. VRECPS 및 VRSQRTS
5.9. NEON 곱하기 명령어
5.9.1. VMUL{L}, VMLA{L} 및VMLS{L}
5.9.2. VMUL{L}, VMLA{L} 및VMLS{L}(스칼라 기준)
5.9.3. VQDMULL, VQDMLAL 및VQDMLSL(벡터 기준 또는 스칼라 기준)
5.9.4. VQ{R}DMULH(벡터 기준 또는스칼라 기준)
5.10. NEON 요소 및 구조체 로드/저장 명령어
5.10.1. 인터리브
5.10.2. 요소 및 구조체 로드/저장 명령어의정렬에 대한 제한
5.10.3. VLDn 및VSTn (하나의 n 요소구조체를 하나의 레인에 로드)
5.10.4. VLDn (하나의 n 요소구조체를 모든 레인에 로드)
5.10.5. VLDn 및VSTn (여러 n 요소구조체)
5.11. NEON 의사 명령어
5.11.1. VAND 및 VORN(즉치값)
5.11.2. VACLE 및 VACLT
5.11.3. VCLE 및 VCLT
5.12. 벡터 부동 소수점 보조 프로세서
5.13. VFP 레지스터
5.13.1. 레지스터 뱅크
5.13.2. 벡터
5.14. VFP 벡터 및 스칼라 연산
5.14.1. 스칼라, 벡터 및 혼합 연산의 제어
5.15. VFP/NEON 시스템 레지스터
5.15.1. FPSCR, 부동 소수점 상태 및 제어 레지스터
5.15.2. FPEXC, 부동 소수점 예외 레지스터
5.15.3. FPSID, 부동 소수점 시스템 ID 레지스터
5.15.4. NEON/VFP 시스템 레지스터의개별 비트 수정
5.16. 0으로 플러시 모드
5.16.1. 0으로 플러시 모드를 사용할 경우
5.16.2. 0으로 플러시 모드의 사용에 따른 영향
5.16.3. 0으로 플러시 모드의 영향을 받지 않는 연산
5.17. VFP 명령어
5.17.1. FABS, FCPY 및 FNEG
5.17.2. FADD 및 FSUB
5.17.3. FCMP
5.17.4. FCVTDS
5.17.5. FCVTSD
5.17.6. FDIV
5.17.7. FMAC, FNMAC, FMSC 및FNMSC
5.17.8. FMUL 및 FNMUL
5.17.9. FSITO 및 FUITO
5.17.10. FSQRT
5.17.11. FTOSI 및 FTOUI
5.17.12. FCONSTS 및 FCONSTD
5.17.13. FSHTOS, FSHTOD, FSLTOS,FSLTOD, FUHTOS, FUHTOD, FULTOS 및 FULTOD
5.17.14. FTOSHS, FTOSHD, FTOSLS,FTOSLD, FTOUHS, FTOUHD, FTOULS 및 FTOULD
5.18. VFP 의사 명령어
5.18.1. VLDR 의사 명령어
5.19. VFP 지시문 및 벡터 표시
5.19.1. 벡터 표시
5.19.2. VFPASSERT SCALAR
5.19.3. VFPASSERT VECTOR
6. Wireless MMX 기술 명령어
6.1. 소개
6.2. Wireless MMX 기술에 대한 ARM 지원
6.2.1. 레지스터
6.2.2. WRN 및 WCN 지시문
6.2.3. 프레임 지시문
6.2.4. 로드 및 저장 명령어
6.2.5. Wireless MMX 기술 및 XScale 명령어
6.3. 명령어 요약
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. DN 및 SN
7.2.10. QN
7.3. 데이터 정의 지시문
7.3.1. LTORG
7.3.2. MAP
7.3.3. FIELD
7.3.4. SPACE
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. END
7.8.4. ENTRY
7.8.5. EQU
7.8.6. EXPORT 또는 GLOBAL
7.8.7. EXPORTAS
7.8.8. EXTERN
7.8.9. GET 또는 INCLUDE
7.8.10. IMPORT
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.8. MOV 명령어의 Thumb 상태 즉치 상수
2.9. 다중 로드 및 저장 명령어의 접미사
2.10. 이전 ARM 어셈블리 언어의 변경 사항
2.11. 필요 조건 완화
2.12. 이전 Thumb 구문과 새 구문 간의 차이점
3.1. 진단 메시지의 심각도
3.2. 기본 제공 변수
3.3. 기본 제공 부울 상수
3.4. armasm의 연산자 우선순위
3.5. C의 연산자 우선순위
3.6. 문자열을 반환하는 단항 연산자
3.7. 숫자 또는 논리 값을 반환하는 단항 연산자
3.8. 곱하기 연산자
3.9. 문자열 조작 연산자
3.10. 시프트 연산자
3.11. 더하기, 빼기 및 논리 연산자
3.12. 관계 연산자
3.13. 부울 연산자
4.1. 명령어 위치
4.2. 분기 명령어 사용 가능 여부 및 범위
5.1. NEON 명령어 위치
5.2. 공유 NEON/VFP 명령어 위치
5.3. VFP 명령어 위치
5.4. 조건 코드
5.5. NEON 포화 범위
5.6. 사용할 수 있는 상수
5.7. 범위를 벗어난 입력 결과
5.8. 범위를 벗어난 입력 결과
5.9. 허용된 매개변수 조합
5.10. 허용된 매개변수 조합
5.11. 허용된 매개변수 조합
6.1. 상태 및 제어 레지스터
6.2. Wireless MMX 기술 명령어
6.3. Wireless MMX 기술 의사 명령어
7.1. 지시문 위치
7.2. OPT 지시문 설정값

소유권 고지 사항

® 또는 ™ 표시가 있는 단어와 로고는 ARM Limited 소유의등록 상표 또는 상표입니다. 이 설명서에 언급된 기타 브랜드와 이름은 해당 소유자의 상표일 수 있습니다.

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

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

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

기밀 상태

이 설명서는 기밀 문서가 아닙니다. 이 설명서의사용, 복사 및 공개에 대한 권한은 ARM과 ARM으로부터이 설명서를 제공받은 당사자가 동의한 계약 조건에따라 라이센스 제한의 적용을 받을 수 있습니다.

제품 상태

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

Revision History
Revision A 2002년8월 릴리스 1.2
Revision B 2003년1월 릴리스 2.0
Revision C 2003년9월 RVDS 버전 2.0용 릴리스 2.0.1
Revision D 2004년1월 RVDS 버전 2.1용 릴리스 2.1
Revision E 2004년12월 RVDS 버전 2.2용 릴리스 2.2
Revision F 2005년5월 RVDS 버전 2.2 SP1용 릴리스 2.2
Revision G 2006년3월 RVDS 버전 3.0용 릴리스 3.0
Copyright © 2002-2006 ARM Limited. All rights reserved. ARM DUI 0204GK
Non-Confidential