어셈블리 기초 http://blog.naver.com/PostView.nhn?blogId=gangst11&logNo=145839687
캐시레지스터 http://jake.dothome.co.kr/cache2/
- msr : 시스템 레지스터는 MSR, MRS 인스트럭션을 사용하여 접근할 수 있다.
msr SPsel , #1 // 1을 stack pointer seletor에 1 값을 쓴다.
. The Processor State, or PSTATE fields, for AArch64 have the following definitions:
SP : Stack pointer selector, 0 = SP_EL0, 1 = SP_ELn
(https://developer.arm.com/docs/100878/latest/processor-state)
- mrs : 레지스터에 값을 복사해주는 명령
mrs x0, CurrentEL // x0에 CurrentEL(Current Exception Level)을 읽어온다
- CPSR : Current Program Status Register
현재 프로그램 상태 레지스터
연산결과를 저장하는 CPSR(Current Program Status Register)의 4개 필드
- N (Negative) : 연산결과가 음수인 경우 1로 SET.
- Z (Zero) : 연산결과가 0인 경우 1로 SET.
- C (Carry) : 덧셈 연산의 Carry일 경우 1로 SET. 뺄셈 연산의 Borrow일 경우 0으로 Clear. rotation shift 연산에서는 shift되어 밀린 1 bit를 저장.
- V (Overflow) : signed 연산의 덧셈, 뺼셈에서 연산 결과로 overflow가 발생한 경우 1로 SET
- cmp : x0과 CurrendEL_EL2의 값 비교
cmp x0, #CurrentEL_EL2 // CurrentEL_EL2의 값은 8
- b.eq : branch on equal 약어. 같이 같으면 분기, condition 부분에 .eq(매크로일수도)
b.eq 1f // f = forward, b = backward, 가까운 1: 으로 이동
- mov_q : 64bit register에 상수를 즉시 move, operand bit가 한정되어있어서 인스트럭션 두개로 나눔
mov_q x0, (SCTLR_EL1_RES1 | ENDIAN_SET_EL1)
- SCTLR : The System Control Register (SCTLR) is a register that controls standard memory, system facilities and provides status information for functions that are implemented in the core.
(https://developer.arm.com/docs/100878/latest/the-system-control-register)
- mov : 왼쪽에 있는 값을 오른쪽으로 복사한다.
mov w0, #BOOT_CPU_MODE_EL1
- isb : Instruction Synchronization Barrier
isb 명령이 동작하는 순간 파이프라인으로 인해 다음 명령이 뒤 따라 들어오게 되는데 이를 모두 버리게한다. 파이프라인 flush. 우선순위를 확실히 구분해야하는 루틴에서는 두 명령 사이에 isb를 실행시켜 두 명령어의 실행순서를 명확히 보장한다.
- adrp : Address of 4KB page at a PC-relative offset. PC에서부터 _PHYS_OFFSET(0x82000)을 더하여 x23에 저장
adrp x23, __PHYS_OFFSET
- adr_l : macro, adrp/add
adr_l x1, __boot_cpu_mode
- adrp : From PC-relative address to 4KB page. 페이지 시스템에서 사용하기위한?
- ADR은 ARM 명령어가 아니라 PC의 상대 주소를 계산하여 주소값을 얻어오는 어셈블러 매크로입니다.
adr r0, adr_test // r0 = adr_test 함수의 주소를 복사한다?
- str : 저장 명령어
str w0, [x1] : x1의 주소에 w0을 저장한다.
[Rm] = Rd. 메모리 주소에 레지스터 값을 저장합니다.
- ldr : 로드 명령어
ldr r1, [r2, #16] : r2에 16byte만큼 더한 주소에서 정수형 값을 읽어와 r1에 저장한다.
Rd = [Rm]. 해당 메모리 주소의 값을 레지스터에 저장합니다.
- dmb : http://jake.dothome.co.kr/barriers/
dmb sy
- dc :
dc ivac, x1
- __create_page_tables : head.S line 287
- TTBR : Translation Table Base Register, 페이지 테이블 주소가 저장되는 레지스터
'개발' 카테고리의 다른 글
AArch64 generic timer (0) | 2019.12.09 |
---|---|
plot graph color (0) | 2019.10.04 |
컴파일러 (0) | 2019.01.08 |
[AWS] 스케일업, 스케일다운: 오토스케일링과 클라우드와치 (0) | 2018.10.13 |
AWS dynamodb (0) | 2018.09.04 |