ARM 명령어 집합 Lecture #7.

Slides:



Advertisements
Similar presentations
ARM core UNIT 03 로봇 SW 교육원 조용수. 학습 목표 PIC, AVR, 8051 ARM 이란 ? ARM 특징 ARM and Thumb ARM Cortex-M0 Interrupt Vector 2.
Advertisements

1 Prof. Young Jin Nam, Daegu University 컴퓨터 구조 (Computer Architecture) 명령어 세트 : 특성과 기능 남영진
Family 의 개요 의 외부 Pin 기능과 내부 기능 Memory 구조 Timing 2 장 8051 의 구조.
마이크로프로세서설계 - 3 ATmega128 마이크로컨트롤러의 특징 LED 실습 1
안드로이드 악성코드 분석론 및 리버싱 27th OCTOBER 2013.
Chapter 9. 컴퓨터설계기초 9-1 머리말 9-2 데이터 처리장치 (Datapath)
ISA 심화 및 start.S code 분석 SIOR 15th 최재훈.
MicroVision.- STR711F Board MicroVision & ST Seminar ARM7TDMI Processor.
제8장. RISC 및 슈퍼스칼라 프로세서 8.1 RISC의 출현 동기 8.2 RISC의 발전 경위
제4장 명령어 처리.
2장 마이크로프로세서 구성요소 Slide 1 (of 19).
제 2장 컴퓨터 구조.
프로그램 제어 분기(branch)와 점프(jump) 명령어 PC의 값의 변경 순차적인 프로그램의 진행순서가
9장 가로채기(Interrupt) Slide 1 (of 15).
기본 컴퓨터의 구조와 설계 Lecture #5.
기본 컴퓨터 프로그래밍 Lecture #6.
컴퓨터 과학 개론 √ 원리를 알면 IT가 맛있다 컴퓨터 과학도를 위한 첫 전공서 ehanbit.net.
2 Part 전자계산기 구조 1. 논리 회로 2. 자료 표현 및 연산 3. 명령어 및 프로세서 4. 명령 수행 및 제어 5.
컴퓨터구조 – 중간시험 (답안지) 부분점수 (사소한 실수면 -1)
Lecture #7 어셈블리어 (4) 매크로 어셈블리어 시스템프로그래밍.
제 1 장 마이크로프로세서의 기본동작.
CPU의 이해 CPU란 무엇인가?
3장 MPU 내부구조 Slide 1 (of 28).
임베디드 하드웨어 Lecture #6.
연습문제풀이/도움말.
제11강 중앙처리장치 2.
7장 마이크로프로세서의 명령어수행과 주소지정 방식 Slide 1 (of 29).
출처: IT CookBook, 컴퓨터 구조와 원리 2.0 제 12장
PowerPC ABI 김종화.
컴퓨터 구조.
1 컴퓨터 시스템 소개.
4장. 컴퓨터 시스템의 구성과 기능 다루는 내용 컴퓨터 분해를 통한 본체 살펴보기 컴퓨터 구성요소 컴퓨터의 기능
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
1 마이크로프로세서의 원리 마이크로컨트롤러 AVR ATmega128.
Chapter 7. Pentium Processor
Chapter 08 제어장치와 마이크로 오퍼레이션.
4장 컴퓨터의 중앙 처리 장치 하 효 순.
Computer Architecture
부트 로더 (blob pre2 중심) Lecture #8.
어셈블리어 및 실습 금 1,2 (314) / 금 3,4 (307) RTDCS 이 종 태
6 중앙처리장치의 조직과 기능 IT CookBook, 컴퓨터 구조와 원리 2.0.
Chapter 06 명령어와 번지지정 방식.
3주 컴퓨터구조.
8086 프로세서의 구조 및 동작 방식 시스템 프로그래밍 - Lecture #2 신라대학교 컴퓨터공학과 시스템 프로그래밍.
임베디드 소프트웨어 설계.
10장. 중앙처리 장치의 명령어 다루는 내용 어셈블리 프로그램의 이해 인터럽트(interrupt) 명령어 세트 주소 지정 방식.
CHAPTER 03. 컴퓨터 구조 컴퓨터 시스템의 구성과 동작 원리_컴퓨터 시스템에 대한 근본적 이해
Chapter 4 The Von Neumann Model.
컴퓨터 시스템 개관 시스템 프로그래밍 - Lecture #1 신라대학교 컴퓨터공학과 시스템 프로그래밍.
6장 연산 장치 6.1 개요 6.2 연산장치의 구성요소 6.3 처리기 6.4 기타 연산장치.
Computer System Architecture
6-1 중앙 처리 장치의 내부 구조 6-2 명령(instruction) 6-3 주소 지정 방식
Windows 환경에서 동작하는 Arm Emulator(Simulator)
PIC16C84의 외형 RA2 1 RA1 I/O PIN I/O PIN RA3 RA0 RTCC OSC1 발 진 RESET
ARM Development Suite v1.2
운영체제 (Operating Systems) (Memory Management Strategies)
1. 컴퓨터 시스템 구성요소 메모리(Memory) 캐시메모리 개념 캐시메모리의 특징 적중률(hit ratio)
암 걸리는 arm리버싱 이태양 제 13회 해킹캠프 첫 인사 자기소개 0.5분 Arm 소개 5분 레지스터 및 명령어 25분
ARM Development Suite v1.2
9장. 중앙처리 장치의 조직과 기능 다루는 내용 컴퓨터 본체에서 CPU의 위치 살펴보기 CPU의 성능, 기능, 조직
DEGITAL LOGIC CIRCUIT Term Project – 4 bit ALU.
ARM Development Suite v1.2
ARM Development Suite v1.2
ARM Development Suite v1.2
10장. 컴퓨터 구조에 대한 세 번째 이야기 작성자: 윤성우.
임베디드 하드웨어 Lecture #6.
Lecture 7 7-Segment LED controller using u-controller
ARM Development Suite v1.2
4-1. 명령어 형식.
Presentation transcript:

ARM 명령어 집합 Lecture #7

목 차 ARM 구조 프로세서 수행 모드 레지스터 구조 예외 처리 과정 ARM 명령어 형식 조건 수행 접미사 데이터 처리 명령어 곱셈 명령어 Load/Store 명령어 다중 레지스터 Load/Store 스택 명령어 SWI 명령어 Branch 명령어 상태 레지스터 접근 명령어 명령어 요약

ARM 구조 특징 모든 명령어가 32bit 크기를 가짐 대부분의 명령어가 1cycle에 수행됨 32bit 크기의 많은 레지스터 load/store architecture 모든 명령어에서 조건 수행 기능 있음 간단한 어드레싱 모드 같은 규격의 간단한 명령어 한 명령어에서 ALU와 shifter 동시 사용 가능 loop을 위한 자동 증가/감소 어드레싱 모드 많은 데이터 처리를 위한 multiple load/store 명령어

ARM 구조 버전

프로세서 수행 모드 usr sys svc abt und irq fiq Kernel 프로그램 수행 할 때 (System) 전원 reset 발생 시 혹은 소프트웨어 인터럽트 발생 시 (Supervisor) 우선 순위 인터럽트 발생 시 (Fast Interrupt) 일반 인터럽트 발생 시 (Interrupt) 메모리 보호 공간 혹은 없는 메모리 공간 액세스 시 (Abort) 잘못된 명령어를 사용할 때 (Undefined) 사용자 프로그램 수행할 때 (User) 특권 모드 특권 모드, 예외 모드 사용자 모드

레지스터 구조 31개의 범용 레지스터(R0 ~ R15)가 프로세서 모드에 따라 선택되어 사용됨 User/ System Supervisor Abort Undefined Interrupt Fast interrupt R0 R1 R2 R3 R4 R5 R6 R7 R8 R8_FIQ R9 R9 _FIQ R10 R10 _FIQ R11 R11 _FIQ R12 R12 _FIQ R13 (SP) R13_SVC R13_ABORT R13_UNDEF R13_IRQ R13 _FIQ R14 (LR) R14_SVC R14_ABORT R14_UNDEF R14_IRQ R14 _FIQ R15 (PC) 31개의 범용 레지스터(R0 ~ R15)가 프로세서 모드에 따라 선택되어 사용됨 특별한 의미를 가지는 범용 레지스터 R13 = SP(stack pointer) R14 = LR(link register) R15 = PC(program counter) 예외가 발생되면 R13 및 R14가 예외용 R13 및 R14로 대치됨 fiq 예외는 R8 ~ R14가 대치됨 6개의 프로그램 상태 레지스터 (CPSR 1개 및 SPSR 5개) - 특별한 명령어로만 접근 가능 CPSR SPSR_SVC SPSR_ABORT SPSR_UNDEF SPSR_IRQ SPSR_FIQ

현재 프로그램 상태 레지스터 (CPSR) 조건 코드 비트 인터럽트 disable 비트 31 28 8 4 N Z C V I F T mode 조건 코드 비트 N = 계산 결과가 음수 Z = 계산 결과가 '0' C = 계산 후 carry 발생 V = 계산 후 overflow 발생 인터럽트 disable 비트 I = 1, IRQ를 disable함 F = 1, FIQ를 disable함 T 비트: '0'이면 명령어가 ARM 명령어이고 '1'이면 Thumb 명령어를 표시 mode 비트: 프로세서의 7개 모드 중 하나를 표시 mode M[4:0] usr fiq irq svc abt und sys 10000 10001 10010 10011 10111 11011 11111

프로그램 카운터(PC) 모든 명령어는 길이가 32 bit이고 메모리에 저장될 때 word(=4 bytes) align되어야 함 R15(=PC)의 값은 bit 2~31에 저장되고 bit 0~1은 항상 '0'임 R14(=LR)는 명령어 BL(Branch with Link)를 사용하여 subroutine 호출 시 return 주소가 자동 저장됨 subroutine call할 때 BL SUB1 subroutine return할 때 MOV R15, R14 (혹은 MOV PC, LR)

예외(exception) 처리 과정 예외 복귀 시 (프로그램에서 수행) 예외 발생 시 (프로세서가 실행) SPSR_<mode>에 CPSR을 복사 CPSR의 모드 bit 변경 CPSR의 I bit를 세트하고 mode가 fiq이면 F bit도 세트 해당 모드의 레지스터 사용으로 변경 LR_<mode>에 return 주소 저장 PC에 해당 예외 vector 주소를 저장 예외 복귀 시 (프로그램에서 수행) CPSR에 SPSR_<mode>를 복사 PC에 LR_<mode>를 복사 예외 종류 예외 모드 예외 vector 주소 Reset Undefined instructions Software Interrupt(SWI) Instruction fetch memory abort Data access memory abort IRQ (Interrupt) FIQ (Fast Interrupt) svc und abt irq fiq 0x00000000 0x00000004 0x00000008 0x0000000c 0x00000010 0x00000018 0x0000001c

ARM 파이프라인 ARM은 빠른 명령어 수행을 위하여 파이프라인을 사용 3 stage 파이프라인 경우 (1990년~1995년) fetch - 명령어를 메모리에서 레지스터로 복사 decode - 명령어를 디코드 execute - 레지스터의 내용을 사용하여 계산한 후 레지스터에 저장 fetch decode execute PC PC-4 PC-8

ARM 명령어 형식 기본 형식 ADD Rd, Rn, Op2 ; Rd = Rn + Op2 Rd = destination register Rn = operand 1 (항상 register임) Op2 = operand 2 (register 혹은 immediate 값) ; 다음은 comment

조건 수행 CPSR의 조건 코드 비트의 값에 따라 명령어를 실행하도록 하기 위해서는 적절한 조건을 접미사로 붙여주면 됨 : ADD r0, r1, r2 ; r0 = r1 + r2 ADDEQ r0, r1, r2 ; If Z is 1 then r0 = r1 + r2 데이터 처리 명령어들의 결과는 CPSR의 조건 코드 비트에 영향을 미치지 못하도록 설계되어 있음 데이터 처리 명령어의 결과가 CPSR의 조건 코드 비트를 변경하기 위해서는 명령어에 접미사로 'S'를 명시하여야 함 ADDS r0, r1, r2 ; r0 = r1 + r2 and set condition bits

조건 수행 접미사

데이터 처리 명령어 관련 명령어 종류 ARM은 load/store architecture 산술 연산 비교 연산 논리 연산 데이터 이동 연산 ARM은 load/store architecture 데이터 처리 명령어는 메모리에 직접 적용이 불가능하고 레지스터에만 적용됨. 하나 혹은 두개의 operand에 대하여 계산 처리 첫째 operand는 항상 레지스터 (Rn) 둘째 operand는 레지스터 혹은 immediate 값으로 barrel shifter를 통하여 ALU로 보내짐

산술 연산 산술 연산 명령어 및 동작: 문법: 예제 ADD: operand1 + operand2 ADC: operand1 + operand2 + carry SUB: operand1 - operand2 SBC: operand1 - operand2 + carry -1 RSB: operand2 - operand1 RSC: operand2 - operand1 + carry - 1 문법: <Operation>{<cond>}{S} Rd, Rn, Operand2 예제 ADD r0, r1, r2 SUBGT r3, r3, #1 RSBLES r4, r5, #5

비교 연산 비교 연산의 결과는 CPSR의 조건 코드 비트를 변경 ('S' 비트를 set 할 필요가 없음) 명령어 및 동작: CMP: operand1 - operand2, but result not written CMN: operand1 + operand2, but result not written TST: operand1 AND operand2, but result not written TEQ: operand1 EOR operand2, but result not written 문법: <Operation>{<cond>} Rn, Operand2 예제: CMP r0, r1 TSTEQ r2, #5

논리 연산 관련 명령어: 문법: 예제: AND: operand1 AND operand2 EOR: operand1 EOR operand2 ORR: operand1 OR operand2 BIC: operand1 AND NOT operand2 (bit clear) 문법: <Operation> {<cond>} {S} Rd, Rn, Operand2 예제: AND r0, r1, r2 BICEQ r2, r3, #7 EORS r1, r3, r0

데이터 이동 연산 관련 명령어: 문법: 예제: MOV: operand1 <- operand2 MVN: operand1<- not operand2 문법: <Operation> {<cond>} {S} Rd, Operand2 예제: MOV r0, r1 ; r0 <- r1 MOVS r2, #10 ; r2 <- 10 and set 'S' bit MVNEQ r1, #0 ; if zero flag set then r1 <- not 0

Shift ARM은 각 명령어의 일부로서 shift 연산을 제공하는 배럴 쉬프터(barrel shifter)를 제공 Operand 1 Operand 2 Barrel Shifter ALU Result

Arithmetic Shift Right Logical Shifts Left LSL #5 ; multiply by 32 (LSL = ASL) Logical Shift Right LSR #5 ; divide by 32 Arithmetic Shift Right ASR #5 ; divide by 32 (signed) Destination Arithmetic Shift Right C Logical Shift Left Logical Shift Right sign 비트 유지 s

Rotate Right through Carry 회전 Shift Rotate Right (ROR) ROR #5 Rotate Right Extended (RRX) RRX #5 Rotate Right Destination C Rotate Right through Carry Destination C

Shift Operand 레지스터가 shift되는 양은 2가지 방법으로 지정. immediate 5-bit ADD r5, r5, r3 LSL #3 추가 cycle 필요 없음 레지스터의 bottom byte 사용 (PC는 안됨) ADD r5, r5, r3 LSL r2 추가 cycle 필요 Shift가 명시되지 않으면 default shift 적용: LSL #0

곱셈 명령어 ARM은 기본적으로 2 개의 곱셈 명령어 제공 사용 상의 제한: Multiply MUL {<cond>} {S} Rd, Rm, Rs ; Rd = Rm * Rs Multiply Accumulate - does addition for free MLA {<cond>} {S} Rd, Rm, Rs, Rn ; Rd = (Rm * Rs) + Rn 사용 상의 제한: Rd 과 Rm 는 동일한 레지스터이어서는 안됨

Load/Store 명령어 ARM은 load/store architecture: memory to memory 데이터 처리 명령을 지원하지 않음 따라서 일단 사용하려는 데이터를 레지스터로 이동해야 함 ARM은 메인 메모리와 상호 작용하는 세 종류의 명령어 집합이 있음 1개 레지스터(single register) 데이터 이동 (LDR/STR). 다수 레지스터(multiple register) 데이터 이동 (LDM/STM). 데이터 스웝 (SWP).

Load/Store - Single Register Word(4 bytes): LDR, STR Halfword(2 bytes): LDRH, STRH Byte(1 byte): LDRB, STRB

Load/Store - Base Register STR r0, [r1] ; r0의 내용을 r1이 가리키는 메모리 위치에 저장 LDR r2, [r1] ; r1이 포인팅하는 메모리 위치의 정보를 r2에 저장 Memory r0 STR의 source 레지스터 0x05 r1 r2 base 레지스터 0x200 0x200 0x05 0x05 LDR의 destination레지스터

Load/Store - Offset base 레지스터 값으로부터 offset 만큼 떨어진 위치의 정보를 접근하는 명령어 pre-indexed LDR r0, [r1, #4] ; r0 := mem32[r1 + 4] post-indexed LDR r0, [r1], #4 ; r0 := mem32[r1], r1 := r1 + 4 auto-indexing LDR r0, [r1, #4]! ; r0 := mem32[r1 + 4], r1 := r1 + 4

Load/Store - Pre-indexed LDR r0, [r1, #4] 0x00001234 1 word=4 byte임 0x00003bf8 0x00001238 0x00000004 + 메모리 r1 r0 0x00 0x3b 0xf8 0x00000000

Load/Store - Post-indexed LDR r0, [r1], #4 메모리 0x00000004 0x00 0x3b 0xf8 r1 값 변경됨 + 0x00001238 0x00 0x51 0x2a r1: 0x00001234 0x00001234 r0 0x0000512a

Load/Store - Auto Indexing LDR r0, [r1, #4]! 0x00001234 1 word=4 byte임 0x00003bf8 0x00001238 0x00000004 + 메모리 r1 r0 0x00 0x3b 0xf8 0x00000000 r1 값 변경됨

다중 레지스터 Load/Store 기본 명령어 확장 명령어 STM/LDM STMIA/LDMIA: Increment After STMIB/LDMIB: Increment Before STMDA/LDMDA: Decrement After STMDB/LDMDB: Decrement Before

블록 복사 ; r12 - source 시작 주소 ; r14 - source 끝 주소 ; r13 - destination 시작 주소 loop LDMIA r12!, {r0-r11} STMIA r13!, {r0-r11} CMP r12, r14 BNE loop r13 r14 r12 low 48 bytes high

스택 어떤 종류의 스택을 사용하느냐에 따라 스택 명령어의 접미사가 달라짐 STMFD/LDMFD: Full Descending stack 참고: ARM 컴파일러가 사용하는 스택 STMFA/LDMFA: Full Ascending stack. STMED/LDMED: Empty Descending stack STMEA/LDMEA: Empty Ascending stack

스택 사용 보기 r5 r4 r3 r1 r0 STMFD sp!, {r0, r1, r3-r5} STMED sp!, STMFA sp!, STMEA sp!, high low Old SP SP SP SP SP

스택과 서브루틴 스택의 용도 중 하나는 서브루틴 내에 선언된 지역 변수에 대한 일시적인 저장소를 제공하는 것 서브루틴 call 시 현재 사용하는 레지스터를 스택에 push하고, 서브루틴 return 시 스택의 pop을 통해 원래의 레지스터 값으로 환원시킴 STMFD sp!, {r0-r12, lr} ; push ........ LDMFD sp!, {r0-r12, pc} ; pop

Swap 명령어 메모리 읽기와 쓰기를 atomic하게 수행하는 명령어 SWP {<cond>} {B} Rd, Rm, [Rn] 보통 Rm과 Rd을 같게 하여 Rm과 mem[Rn]을 swap함 Rn Rm 메모리 Rd temp 1 2 3

Software Interrupt (SWI) svc 예외를 발생시킴 예외 발생시 처리하는 과정이 이루어짐 0x00000008 번지로 jump하게 됨 System call을 할 때 사용 MOV r0, #'A' ; r0= 'A' SWI SWI_WriteC

Branch 명령어 Branch Branch with Link B{<cond>} label BL{<cond>} sub_routine_label

상태 레지스터 접근 명령어 CPSR/SPSR 와 범용 레지스터 간의 데이터 이동 가능 명령어 종류 MRS : 범용 레지스터 <- Status 레지스터 MSR : Status 레지스터 <- 범용 레지스터 혹은 Immediate 값 명령어 종류 MRS {<cond>} Rd,<psr> ; Rd = <psr> MSR {<cond>} <psr>,Rm ; <psr> = Rm MSR {<cond>} <psr>, #Immediate ; <psr> = #Immediate

명령어 요약 - 1/4 Mnemonic Instruction Action ADC Add with carry Rd: = Rn + Op2 + C ADD Add Rd: = Rn + Op2 AND Rd: = Rn AND Op2 B Branch R15: = address BIC Bit Clear Rd: = Rn AND NOT Op2 BL Branch with Link R14: = R15, R15: = address CDP Coprocessor Data Processing (Coprocessor-specific) CMN Compare Negative CPSR flags: = Rn + Op2 CMP Compare CPSR flags: = Rn – Op2 EOR Exclusive OR Rd: = (Rn AND NOT Op2) OR (op2 AND NOT Rn)

명령어 요약 - 2/4 Mnemonic Instruction Action LDC Load coprocessor from memory Coprocessor load LDM Load multiple registers Stack manipulation (Pop) LDR Load register from memory Rd: = (address) MCR Move CPU register to coprocessor register cRn: = rRn {<op>cRm} MLA Multiply Accumulate Rd: = (Rm * Rs) + Rn MOV Move register or constant Rd: = Op2 MRC Move from coprocessor register to CPU register Rn: = cRn {<op>cRm} MRS Move PSR status/flags to register Rn: = PSR

명령어 요약 - 3/4 Mnemonic Instruction Action MSR Move register to PSR status/flags PSR: = Rm MUL Multiply Rd: = Rm * Rs MVN Move negative register Rd: = 0xFFFFFFFF EOR Op2 ORR OR Rd: = Rn OR Op2 RSB Reverse Subtract Rd: = Op2 – Rn RSC Reverse Subtract with Carry Rd: = Op2 – Rn – 1 + C SBC Subtract with Carry Rd: = Rn – Op2 - 1 + C STC Store coprocessor register to memory address: = CRn STM Store Multiple Stack manipulation (Push)

명령어 요약 - 4/4 Mnemonic Instruction Action STR Store register to memory <address>: = Rd SUB Subtract Rd: = Rn – Op2 SWI Software Interrupt OS call SWP Swap register with Memory Rd: = [Rn], [Rn] := Rm TEQ Test bitwise equality CPSR flags: = Rn EOR Op2 TST Test bits CPSR flags: = Rn AND Op2