Presentation is loading. Please wait.

Presentation is loading. Please wait.

ISA 심화 및 start.S code 분석 SIOR 15th 최재훈.

Similar presentations


Presentation on theme: "ISA 심화 및 start.S code 분석 SIOR 15th 최재훈."— Presentation transcript:

1 ISA 심화 및 start.S code 분석 SIOR 15th 최재훈

2 Index ARM Instruction Set start.S code 분석 ARM Instruction의 특징
Branch 명령 Data Processing PSR Transfer Multiply 명령 Single Data Transfer 명령 Block Data Transfer 명령 SWAP 명령 SWI 명령 start.S code 분석

3 ARM Instruction Set

4 ARM Instruction의 특징 32bit 하나의 Word로 처리 상대주소 방식 사용
Condition code를 모든 명령어에 적용가능 high code density – 16bit Thumb mode 지원 예제 a=(b==c) ? d:e; CMPS r2, r3 MOVEQ r1, r4 MOVNE r1, r5

5 Branch and Branch with Link
L - Link bit [ 0 : B , 1 : BL ] Offset 값은 2bit를 PC에서 left shift  32Mb Memory 접근 (원래 24bit offset :16Mb) Brach 형식 : B{L}{cond}<expression> {L} : BL일 때는 Linker인 R14에 PC 값을 넣는다. {cond} : 조건 코드이다. 없을 때는 AL가 된다. <expression> : 목적 주소를 적는다 예제 B start /* ALways condition used as default */ CMP R1, #0 /* compare R1 with zero and branch to fred */ BEQ end /* if R1 was zero otherwise continue to next In next instruction */

6 Data Processing Instruction

7 Data Processing Ins (cont…)
<cond> [31:28] 4bit <I> [25] 1bit Operand2 의 immediate operand 여부 <OpCode> [24:21] 4bit

8 Data Processing Ins (cont…)
<S> [20] 1bit S bit 1  CPSR 영향 有 S bit 0  CPSR 영향 無 <Rn> [19:16] 첫 번째 Operand Register 로 지정되어야 함 명령에 따라 사용하지 않음  MOV, MVN <Rd> [15:12] 4bit Operation의 결과가 저장될 Register

9 Data Processing Ins (cont…)
Operand2 [11:0] 12bit Register Operand [ shift (11:4) | Rm (3:0) ] shift field [ cont(5) | type(2) | 0(1) ] [ Rs(4) | 0(1) | type(2) | 1(1) ] type 00 : logical left (LSL) 01 : logical right (LSR) 10 : arithmetic right (ASR) 11 : rotate right (ROR) Immediate Operand [ Rotate (11:8) | Imm (7:0) ] 8bit  32bit Rotate 값 * 2

10 Data Processing Instruction
EX [ex1] MOV r0, r1 [ex2] MOV r0, #0 [ex3] MOV r0, #0xfc000003 [ex4] MOV r0, r1, LSL #1 [ex5] MOV r0, r1, LSR r2 [ex6] MOVS r0, r1, LSR #1 MOVCC r0, #10 MOVCS r0, #11

11 PSR Transfer 명령 MSR{cond} Rd, <psr> : Transfer PSR contents to a register MSR{cond} <psr>, Rm : Transfer register contents to PSR MSR{cond} <psrf>, Rm : Transfer Register contents to PSR flag bits only [ex] MSR CPSR_all, r0  user mode에서 수행되었다면, control bit들은 영향을 받지 않고 flag bit만 영향 받음 모드전환 예제 MRS R0, CPSR_all ; Copy the PSR BIC R0, R0, #&1F ; Clear the mode bits ORR R0, R0, #new_mode ; Set bits for new mode MSR CPSR_all, R ; Write PSR back, change mode

12 Multiply 명령 MUL{cond}{s} Rd, Rm, Rs MLA{cond}{s} Rd, Rm, Rs, Rn
MUL R1, R2, R ; R1 := R2*R3 MLA{cond}{s} Rd, Rm, Rs, Rn Rd := Rm * Rs + Rn 나눗셈에 대한 명령어는 존재하지 않는다.

13 Single Data Transfer

14 Single Data Transfer (cont…)
Register와 외부 Memory와의 Data 전송담당 (Register 간 데이터 전송을 담당하는 MOV와 구분) 명령 형식 LDR{cond}{B} Rd, address{!} ; Rd := contents of Address LDR{cond}{B} Rd, =expression ; Rd := expression STR{cond}{b} Rd, address{!} ; contents of address :=Rd Pre-Indexed Addressing Mode Rn 을 Base 주소로 사용 LDR|STR {cond}{B} Rd, [Rn <offset>]{!} {B}는 부호 없는 바이트 전달(unsigned byte transfer) {!} : Write back  auto indexing Post-Indexed Addressing Mode Effective Address는 항상 Rn. 즉 Base address를 나타내는 값 LDR|STR{cond}{B}{T} Rd, [Rn], <offset> {T} : Memory Translation 반드시 시스템 모드에서만 선택가능 Write back Default

15 Single Data Transfer (cont…)
   Mode                 Effective address                Indexing      [Rn]                Rn                                 none   [Rn,+- expression]    Rn +- expression                 Pre-indexed   [Rn,+- Rm]            Rn +- Rm                       Pre-indexed   [Rn,+- Rm, shift cnt] Rn+-(Rm shifted by cnt)         Pre-indexed   [Rn],+-expression     Rn                               Post-indexed   [Rn],+-Rm             Rn                               Post-indexed   [Rn],+-Rm,shift cnt    Rn                               Post-indexed    # Rn : base 주소를 가지고 있는 레지스터          Rm : r15를 제외한 레지스터(Offset), 부호 값 사용          expression : 범위의 Immediate 값(12Bit)          shift : LSL, LSR, ASR, ROR, RRX          cnt : 사이의 값.

16 Block Data Transfer Multiple register transfer Instruction

17 Block Data Transfer (cont…)
LDM, STM LDM : 베이스 레지스터(Rn)로 지정된 번지에서 레지스터 목록으로 지정된 각 레지스터의 내용을 읽어 들이는 명령 STM : LDM과 반대 LDM|STM {cond}<add mode> Rn{!} LDM 명령어는 Mnemonic 상의 16bit 공간 존재  각 bit가 Register 와1:1 Mapping 동작 모드 Post-Increment Addressing Pre-Increment Addressing Post-Decrement Addressing Pre-Decrement Addressing

18 Block Data Transfer (cont…)
============================================            동작                          Stack            Other              pre  increment load             LDMED          LDMIB         post increment load            LDMFD           LDMIA         pre  decrement load            LDMEA          LDMDB         post decrement load           LDMFA          LDMDA         pre  increment store            STMFA           STMIB         post increment store           STMEA           STMIA         pre  decrement store           STMFD           STMDB         post decrement store          STMED           STMDA     ============================================

19 SWAP, SWI Single Data SWAP Software Interrupt (SWI)
SWP{cond}{B} Rd, Rm, [Rn] ; Rd:=[Rn] , [Rn]:=Rm 두 개의 Register의 값을 바꿔주는 명령어 Atomic Memory 동작 Non-Word Operation :: Byte Operation Software Interrupt (SWI) SWI{cond} <expression> 동작모드 변경 : User  Supervisor 구체적인 동작 현재의 PC를 r14_svc에 저장한다. 현재의 상태 레지스터인 CPSR을 SPSR_svc에 저장한다. Supervisor 모드로 들어가서 IRQ를 Disable 한다. PC를 0x08로 setting하고, 그곳에서 instruction을 수행한다.

20 start.S code

21 start.S code의 필요성 스택의 초기화 임베디드 시스템의 기본적인 초기화 작업 메모리, 스택, 전역변수 초기화

22 Exception On Handler

23 Memory Initializing No need Address Decoder  Programmable 메모리 시작주소
메모리 크기 메모리의 종류 (ROM, SDRAM, DRAM) Access Time Dram Reflash

24 Interrupt Processing H/W : FIQ, IRQ S/W : SWI Non-Vector 방식

25 Stack Initializing 스택 포인터에 베이스주소를 넣어줌 동작 모드 각각의 6개 스택포인터를 모두 초기화
MRS reg, CPSR/SPSR MSR CPSR_CXSF/SPSR, reg/immediate

26 전역변수 Initializing 지역변수 초기화는 해당 서브루틴에서 수행 전역변수는 “Data” 공간을 사용
전역변수는 C 프로그램이 수행되기 전에 초기화되어야 함 전역변수의 종류 ZI(Zero Init) - 초기화 되지 않은 변수, 배열  0 으로 초기화 RW(Read Write) – 초기화 값이 있는 것  초기화 작업이 필요 RO(Read Only) - 상수  초기화 작업이 필요로 하지 않는다.


Download ppt "ISA 심화 및 start.S code 분석 SIOR 15th 최재훈."

Similar presentations


Ads by Google