Embedded System

Similar documents
Microsoft Word - 1. ARM Assembly 실습_xp2.doc

Microsoft PowerPoint - 05-ARM-Instruction-Set.ppt

ARM Reverse Engineering

Microsoft PowerPoint - LN_1_ARM_CPU_0.ppt [호환 모드]

untitled

Microsoft PowerPoint - hy2-12.pptx

9

PowerPoint 프레젠테이션

온라인 IT 교육최강 ( 강의정보처리필기강사조대호 차시명 [CA-06 강 ] 프로세서와명령어차시 6 차시 학습내용 프로세서와명령어 학습목표 컴퓨터의구조와프로세서에대해이해할수있다 컴퓨터의명령어에대해이해할수있다 학습내용 1. 컴퓨터의구성 - 1

Computer Architecture

슬라이드 1

Microsoft PowerPoint - a6.ppt [호환 모드]

(1) 주소지정방식 Address Mode 메모리접근 분기주소 명령어 직접번지 Reg. 지정 Reg. 간접 Base Index 간접 Immediate 상대번지 절대번지 Long 주소 Reg. 간접 Byte Access Bit Access 내부 Data M

Microsoft PowerPoint - hy2-12.pptx

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Microsoft PowerPoint - hw8.ppt [호환 모드]

INTRO Basic architecture of modern computers Basic and most used assembly instructions on x86 Installing an assembly compiler and RE tools Practice co

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

학습목표 2/33 마이크로프로세서와마이크로컨트롤러의차이를알수있다. 마이크로프로세서에서프로그램이수행되기위한명령어형식과명령어실행절차를알수있다. 프로그램을수행하려면어떤종류의명령어가필요한지알수있다. 현대컴퓨터의기본모델인저장형프로그램컴퓨터의한계점과그한계를완화하려는방법을알수있다.

ARM 프로세서 입문

PowerPoint 프레젠테이션

프로그램을 학교 등지에서 조금이라도 배운 사람들을 위한 프로그래밍 노트 입니다. 저 역시 그 사람들 중 하나 입니다. 중고등학교 시절 학교 도서관, 새로 생긴 시립 도서관 등을 다니며 책을 보 고 정리하며 어느정도 독학으르 공부하긴 했지만, 자주 안하다 보면 금방 잊어

OCW_C언어 기초

슬라이드 1

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

Microsoft PowerPoint - M07_RTL.ppt [호환 모드]

untitled

Here is a "PLDWorld.com"... // EXCALIBUR... // Additional Resources // µc/os-ii... Page 1 of 23 Additional Resources: µc/os-ii Author: Source: HiTEL D

Chapter ...

Microsoft PowerPoint - chap01-C언어개요.pptx

q ARM (Advanced RISC Machines) v 1990년설립 v UK-based joint venture Ø Apple Computer, Acorn Computer Group, and VLSI Technology q 32-bit RISC Intellectu

프로그램카운터 (Program Counter) 명령레지스터 (Instruction Register) 누산기 (AC: Accumulator) 상태레지스터 (Status Register) PSWR(Program Status Word Register) 메모리주소레지스터 (M

학습목차 r 컴퓨터본체에서 CPU 의위치살펴보기 r CPU 의성능 r CPU 의기능 r CPU 의조직 r 레지스터의조직 r 명령어사이클 r 명령어파이프라이닝 컴퓨터구조 2 9. CPU 조직과기능

Microsoft PowerPoint - ARM System-on-chip architecture_Chap 4_23p.ppt

PowerPoint 프레젠테이션

Introduction to LMC

Microsoft Word - FunctionCall

<C1A4BAB8C3B3B8AE5FB1E2BBE75FC7CAB1E25F E687770>

한국기술교육대학교장영조 한국기술교육대학교전기전자통신공학부 1

hwp

PowerPoint 프레젠테이션

No Slide Title

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

chap 5: Trees

[8051] 강의자료.PDF

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - 15-MARS

강의개요

Microsoft PowerPoint - o8.pptx

금오공대 컴퓨터공학전공 강의자료

ARM 아키텍쳐 - ARM 아키텍쳐 - Programming 모델 - ARM 프로세서명령어 - 예외처리와시스템리셋 - ARM9TDMI 프로세서 한국기술교육대학교 전기전자통신공학부 장영조 한국기술교육대학교임베디드 SOC 설계및실습

학습목차 r컴퓨터분해를통한본체살펴보기 r컴퓨터구성요소 r컴퓨터의기능 r버스와상호연결 컴퓨터구조 2 4. 컴퓨터시스템의구성과기능

Microsoft PowerPoint - chap06-2pointer.ppt

Microsoft PowerPoint - DSD06c_ISA.pptx

Microsoft Word - ExecutionStack

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap04-연산자.pptx

라는 점이다. ARM7TDMI 같은 ARM7에서는 페치(fetch), 디코드 (decode) 그리고 실행(execute)의 3단계로 구성된 파이프라인을 적 V4 PF1 ARMv I-캐시 액세 + 다이내믹

3차시.ppt

T100MD+

=

SRC PLUS 제어기 MANUAL

<B9E9BCAD31B1C72DC0DBBEF72D32B1B32E687770>

JVM 메모리구조

Microsoft Word - Reverse Engineering Code with IDA Pro-2-1.doc

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

PowerPoint 프레젠테이션

Microsoft PowerPoint - C프로그래밍-chap00.ppt [호환 모드]

PowerPoint 프레젠테이션

10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다

강의10

PowerPoint Presentation

PowerPoint 프레젠테이션

2. GCC Assembler와 AVR Assembler의차이 A. GCC Assembler 를사용하는경우 i. Assembly Language Program은.S Extension 을갖는다. ii. C Language Program은.c Extension 을갖는다.

歯 조선일보.PDF

< B5BFBEC6BDC3BEC6BBE E687770>

Microsoft PowerPoint - a3.ppt [호환 모드]

Computer Architecture

정보보안 개론과 실습:네트워크

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

슬라이드 1

4.18.국가직 9급_전산직_컴퓨터일반_손경희_ver.1.hwp

PowerPoint 프레젠테이션

K&R2 Reference Manual 번역본

Microsoft Word - PLC제어응용-2차시.doc

Microsoft PowerPoint - 03_(C_Programming)_(Korean)_Pointers

BMP 파일 처리

구문 분석

PowerPoint 프레젠테이션

Computer Architecture

Microsoft PowerPoint - PL_03-04.pptx

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

Microsoft Word - FS_ZigBee_Manual_V1.3.docx

U.Tu System Application DW Service AGENDA 1. 개요 4. 솔루션 모음 1.1. 제안의 배경 및 목적 4.1. 고객정의 DW구축에 필요한 메타정보 생성 1.2. 제품 개요 4.2. 사전 변경 관리 1.3. 제품 특장점 4.3. 부품화형

Microsoft PowerPoint - 15-SMT_cho.ppt

MicrocontrollerAcademy_Lab_ST_040709

PowerPoint 프레젠테이션

슬라이드 1

Transcription:

컴퓨터시스템구조론 (3 장 ) Taehyoun Kim Dept. of Mechanical & Information Engineering, University of Seoul

Outline 간단한컴퓨터 (Basic Computer) 를이용한어셈블리이해 어셈블리프로그램기본구조 ARM 어셈블리어

간단한컴퓨터를이용한어셈블리이해

어셈블리어란? 프로그램 (Program) 의정의 컴퓨터상에서데이터처리를위해작성된일련의명령어혹은구문들의집합 프로그래밍언어의계층구조 기계어 (Machine Language) 이진코딩 (binary-encoded) 된명령어사용 컴퓨터하드웨어가별다른변환과정없이바로이해하고실행 하드웨어의존적 어셈블리어 (Assembly Language) 기계어에 1:1 로대응되도록정의된심볼을이용 프로그래머가작성할수있는최하레벨언어 하드웨어의존적 고수준언어 (High-level Language) 일반적으로프로그래밍언어라고불리는사용자수준의언어 하드웨어독립적 (C, C++, Java, Fortran 등 )

프로그래밍언어계층구조 컴파일러 (Compiler) 어셈블러 (Assembler)

가상적인기본컴퓨터 기본컴퓨터 (Basic Computer) ALU 레지스터 : PC, IR, AC, AR, DR 각레지스터의크기는 16 bit (1 word=16 bits) 메모리용량 ; 4096워드 ( 주소비트 =12 bits) 명령어종류 : 데이터산술연산, 데이터이동, 프로그램제어 ALU PC IR 주소버스 데이터버스 0 1 2 AR 제어장치 AC DR 제어버스 4095 프로세서 메모리

가상적인기본컴퓨터 ( 계속 ) 명령어종류 데이터전송 : LOAD, STORE, MOVE 연산 : ADD, SUBSTRACT, AND, NOT 제어 : JUMP, Conditional JUMP 연산 연산코드 오퍼랜드 설명 STOP 0000 STOP 수행 ( 프로그램의끝을알림 ) LD 0001 addr 오퍼랜드의메모리주소에서 AC로적재 ST 0010 addr 오퍼랜드의메모리주소로 AC값을저장 MOVAC 0011 AC DR MOV 0100 DR AC ADD 0101 AC DR +AC SUB 0110 AC AC - DR AND 0111 DR AND AC NOT 1000 NOT AC BRA 1001 addr JUMP (addr) BZ 1010 addr If AC=0, JUMP(addr)

가상적인기본컴퓨터 ( 계속 ) 명령어형식 연산코드 (4 비트 ) 피연산자 (12 비트 ) 연산코드필드와피연산자필드의크기는왜각각 4 비트와 12 비트일까?

가상적인기본컴퓨터 ( 계속 ) 가상컴퓨터상에서의기계어프로그램예제 메모리주소 12에초기값 350, 14에 96 저장되어있음 두수를더해결과값을메모리주소 16에저장 메모리위치 (Byte) 프로그램 ( 명령어 ) 설명 0000 0000 0000 0001 0000 0000 1100 메모리 12위치에서 AC로이동 0000 0000 0010 0011 0000 0000 0000 AC DR 0000 0000 0100 0001 0000 0000 1110 메모리 14위치에서 AC로이동 0000 0000 0110 0101 0000 0000 0000 AC AC + DR 0000 0000 1000 0010 0000 0001 0000 AC의값을메모리 16위치에저장 0000 0000 1010 0000 0000 0000 0000 STOP 0000 0000 1100 0000 0001 0101 1110 데이터값 350 (16진수: 15E) 0000 0000 1110 0000 0000 0110 0000 데이터값 96 (16진수: 060) 0000 0001 0000 0000 0000 0000 0000 데이터값 0

어셈블리프로그램기본구조

어셈블리프로그램 기계어 vs. 어셈블리어 기계어는이진코드로작성되며컴퓨터하드웨어가바로실행가능 어셈블리어는기계어를사람이알아보기쉬운기호 / 심볼 (Mnemonics) 으로바꾼언어를말함 기계어와어셈블리어는특정프로세서에의존적임. 즉, 프로세서가달라지면비슷한동작을표시하는명령어의내용도다달라짐

어셈블리프로그램 ( 계속 ) 어셈블리프로그램의구조 각라인이하나의어셈블리명령어를대표하며, 각라인의구조는다음과같음 Label (Optional) Operation Code Operand Comments (Optional) 레이블 : 메모리주소를심볼로표시한것. 메모리위치를굳이표시할필요가없을때는비워둠 명령어코드 : 기계어명령어를니모닉 ( 심볼 ) 형태로표시하거나의사명령어 ( 어셈블리지시어 ) 를나타냄 피연산자 : 연산에필요한데이터값, 주소등을나타내며숫자는진수를나타낼경우숫자바로뒤에진수문자 (B, O, H) 등을사용 주석 ( 코멘트 ): 프로그램내용을설명하는데사용하며, 세미콜론 (;) 이나슬래쉬 (/) 등을이용해주석의시작을알림 가상기본컴퓨터의어셈블리니모닉 ( 표 3-3 참조 )

어셈블리프로그램 ( 계속 ) 어셈블러지시어 (Assembler Directive) 실제기계어명령어에는대응되지않으나어셈블리프로그램을기계어로변환할때사용되는의사명령어 (Pseudo Instructuion) 종류 ( 예 : x86) ORG: 프로그램과데이터의시작주소설정 END: 어셈블러작업의종료를나타내며, END 문이후의프로그램은기계어로변환되지않음 EQU: 레이블이름에상수값지정 (C 언어의 #define 과유사 ) DB (Define Byte), DW (Define Word): 메모리에데이터를 1 byte 혹은워드단위로할당

어셈블리프로그램 ( 계속 ) 어셈블리프로그램예제 LD X / AC X MOVAC / DR AC LD Y /AC Y ADD /AC AC+DR ST Z / Z AC STOP X W 900 / Reserve a word initialized to 900 Y W 300 Z W 100

어셈블러와프로그램실행 어셈블러 소스프로그램 : 심볼로작성된어셈블리어프로그램 목적프로그램 : 어셈블러에의해번역된이진기계어프로그램 이중패스어셈블러 1 단계 : 사용자가지정한심볼과주소간매핑테이블등기계어번역에필요한테이블구성 2 단계 : 1 단계에서생성한테이블을바탕으로기계어번역수행 사용되는자료구조 심볼테이블 : 사용된레이블과매핑된주소저장 (2 단계에서레이블을실제주소로대체하는데사용 ) 연산테이블 : 연산명령어를찾아서기계어코드로번역 지시어테이블 : 지시어심볼을저장하고, 이에따른기계어번역수행

어셈블러와프로그램실행 이중패스어셈블러의동작 연산 연산코드 STOP 0000 LD 0001 ST 0010 MOVAC 0011 MOV 0100 ADD 0101 SUB 0110 AND 0111 NOT 1000 BRA 1001 BZ 1010 LD X / AC X MOVAC / DR AC LD Y /AC Y ADD /AC AC+DR ST Z / Z AC STOP X W 900 Y W 300 Z W 100 의사명령어 W 심볼 X Y Z 주소 12 (0x0C) 14 (0x0E) 16 (0x10) 0001 0000 0000 1100 0011 0000 0000 0000 0001 0000 0000 1110 0101 0000 0000 0000 0010 0000 0001 0000 0000 0000 0000 0000 0000 0011 1000 0100 0000 0001 0010 1100 0000 0000 0110 0100

어셈블러와프로그램실행 ( 계속 ) 링커와로더 링커 로더 프로그램의범위가커지면이미짜여져있는코드 (library) 를사용하거나사용자가새로작성하는프로그램도여러개의모듈로나누어작성하는경우가생김 여러개로작성된모듈간의참조사항을연결해최종실행파일을만들어냄 실행파일에포함된정보를이용해실제수행시메모리상황에맞게프로그램을재배치하고수행할수있도록함 소스프로그램 Library Assembler Linker Loader Assembly Program Object Program Executable Program

ARM 어셈블리어

ARM 프로세서소개 역사 Acorn Computers Ltd., Cambridge (1983~1985) ARM Ltd. (since 1990) Acorn 에서분사한세계최고수준의마이크로프로세서공급업체 자체반도체생산공장없이설계도 (IP) 만라이센스하는독특한비즈니스모델을가지고있음 * Courtesy of www.arm.com

ARM 프로세서특징 RISC 프로세서 레지스터중심의 load-store 아키텍쳐 메모리접근은 Load/Store 명령에대해서만이루어짐 나머지명령은레지스터나즉치값을피연산자로함 32-bit 명령어집합 많이쓰이는명령어에대해서는축약된 16-bit 명령어집합 (Thumb instruction set) 제공 ( 전체 32-bit 명령어중 80% 포함 ) 단순한레지스터모델제공으로저비용, 저전력시스템구현 기본적인형태는 3- 주소명령어형태 32 비트주소사용으로 4 GB 주소공간제공 DSP 응용을위한확장명령어, 자바바이트코드수행을위한가속엔진 (Jazelle) 제공 사용자모드와특권모드로구분된동작 모든명령어가조건부실행가능 Shift 동작과일반산술동작을한명령어에서수행할수있음 Big-endian 모드와 Little-endian 모드모두제공 ( 부팅시결정 )

ARM 어셈블리어특징 각라인이하나의어셈블리명령어를대표하며, 각라인의구조는다음과같음 Label (Optional) Operation Code Operands Comments (Optional) 레이블 : 메모리주소를심볼로표시한것. 메모리위치를굳이표시할필요가없을때는비워둠 명령어코드 : 기계어명령어를니모닉 ( 심볼 ) 형태로표시하거나의사명령어 ( 어셈블리지시어 ) 를나타냄 피연산자 : 연산에필요한데이터값, 주소등을나타냄 주석 ( 코멘트 ): 프로그램내용을설명하는데사용하며, 세미콜론 (;) 으로주석의시작을알림

ARM 프로그래밍모델 기본레지스터 set r0 r1 r2 r3 r4 r5 r6 r7 r8 r9 r10 r1 1 r12 r13 r14 r15 (PC) r8_fiq r9_fiq r10_fiq r1 1_fiq r12_fiq r13_fiq r14_fiq r13_svc r14_svc r13_abt r14_abt usable in user mode system modes only r13_irq r14_irq r13_und r14_und CPSR SPSR_fiq SPSR_svc SPSR_abt SPSR_irq SPSR_und user mode fiq mode svc mode abort mode irq mode undefi ned mode

ARM 프로그래밍모델 ( 계속 ) CPSR: 지난연산결과와현재동작모드를표시 Condition codes N: Negative ( 산술연산결과가음수일때 set 됨 ) Z: Zero ( 연산결과비트가모두 0 일때 set 됨 ) C: Carry ( 연산결과로 carry 가발생했을때 set 됨, 무부호 ) V: overflow ( 산술연산결과가 overflow 일때 set 됨, 부호 ) Q: Saturation (DSP 명령의결과로 overflow/saturation 발생 ) J: Jazelle mode ( 프로세서가 Java 모드로수행되고있음 ) Control bits I/F: IRQ/FIQ processing enable/disable T: Thumb state (Read-only) Mode[4:0]: operating mode (10000~11111) 31 28 27 24 8 7 6 5 4 0 N Z C V Q J unused I F T mode Adopted by v5te/j

ARM 프로그래밍모델 ( 계속 ) 기본명령어형식 31 28 27 26 25 24 21 20 19 16 15 12 11 0 cond 00 X opcode S Rn Rd Op2 (x bit 에따름 ) 조건부실행 Set condition code <op>{cond}{s} Rd, Rn, #<immediate> <op>{cond}{s} Rd, Rn, Rm, {shift}

ARM 프로그래밍모델 ( 계속 ) 명령어내에서 shift 연산사용하기 예 ) ADD r0, r1, r1, LSL #1 - 실행전 : r0 = 0x00000000 r1 = 0x00000005 - 실행후 : r0 = 0x0000000f r1 = 0x00000005 Rn Barrel Shifter ALU Rm x=1 11 8 7 0 #rot 8 비트즉치 MOV r0, #0xFF, ROR 8 r0 = 0xFF000000 x=0 Sh: 쉬트프종류 11 #shift 7 6 5 Sh 4 0 3 Rm 0 #shift 값만큼이동 ADD r0, r1, r2, LSL #7 r0 = r1+(r2 << 7) 11 7 6 5 4 3 0 Rs Sh 1 Rm ADD r0, r1, r2, LSL r3 Rs 값만큼이동 r0 = r1+(r2 << r3)

ARM 프로그래밍모델 ( 계속 ) 다른명령어에포함되는 shift 연산 (op2 필드 ) Assembler Rm, LSL #immediate Rm, LSL Rs Rm, LSR #immediate Rm, LSR Rs Rm, ASR #immediate Rm, ASR Rs Rm, ROR #immediate Rm, ROR Rs Rm, RRX Action #immediate 값만큼왼쪽논리쉬프트 Rs 값만큼왼쪽논리쉬프트 #immediate 값만큼오른쪽논리쉬프트 Rs 값만큼오른쪽논리쉬프트 #immediate 값만큼오른쪽산술쉬프트 Rs 값만큼오른쪽산술쉬프트 #immediate 값만큼오른쪽환형쉬프트 Rs 값만큼오른쪽환형쉬프트 1만큼오른쪽환형쉬프트 ; Rm[31] = C flag

ARM 프로그래밍모델 ( 계속 ) LSL(Logical Shift Left): 원래수에 2 의제곱수를곱합 C Destination 0 LSR(Logical Shift Right): 원래수를 2 의제곱수로나눔 0 Destination C ASR(Arithmetic Shift Right): 원래수를 2 의제곱수로나눔 ( 부호유지 ) 부호 Destination 0 ROR(Rotate Right): 원래수를오른쪽으로순환시킴 Destination C RRX(Rotate Right Extended): 원래수를오른쪽으로순환시킴 (C 포함 ) Destination C

ARM 프로그래밍모델 ( 계속 ) 조건부실행 어셈블리명령어 opcode 뒤에 조건 을나타내는 2 자리심볼을붙임 4 비트 cond 필드 ( 명령어 bits 31~28) 참조 cond 필드가표시한조건이만족될때에만해당명령실행 불필요한비교명령어사용감소 검사되는조건의내용은교재그림 3-11 참고 명령어실행결과에따라 CPSR 의내용변경 비교명령의경우에는무조건관련있는상태코드를변경함 데이터처리에관한어셈블리명령어의경우 opcode 뒤에 S 를붙이면결과에따라 CPSR 내의관련있는상태코드를변경 의사명령어 예 ) ADR r1, x ; 메모리번지 x 를 r1 레지스터로로딩 예 ) BIGBLOCK %10 ; BIGBLOCK 이란이름으로 10 워드 ; 저장공간확보

ARM 프로그래밍모델 ( 계속 ) 명령어분류 산술연산 논리연산 비교연산 데이터이동 데이터전송 제어이동 ( 분기 ) 기타

ARM 프로그래밍모델 ( 계속 ) 산술명령어 Assembler updates Action ADD {cond}{s} Rd, Rn, <Operand2> N Z C V Rd := Rn + Operand2 ADC {cond}{s} Rd, Rn, <Operand2> N Z C V Rd := Rn + Operand2 + carry SUB {cond}{s} Rd, Rn, <Operand2> N Z C V Rd := Rn Operand2 SBC {cond}{s} Rd, Rn, <Operand2> N Z C V Rd := Rn Operand2 ~ carry RSB {cond}{s} Rd, Rn, <Operand2> N Z C V Rd := Operand2 Rn RSC {cond}{s} Rd, Rn, <Operand2> N Z C V Rd := Operand2 Rn ~ carry ; If zero flag is set then ; r0 = r1+r2 ; opcode[31:28] = b0000 ADDEQ r0, r1, r2 ADDS r0, r1, r2 ; r0 = r1+r2 ; and set flag in CPSR ; opcode[21] = 1

ARM 프로그래밍모델 ( 계속 ) 논리명령어 Assembler updates Action AND {cond}{s} Rd, Rn, <Operand2> N Z C Rd := Rn & Operand2 ORR {cond}{s} Rd, Rn, <Operand2> N Z C Rd := Rn Operand2 EOR {cond}{s} Rd, Rn, <Operand2> N Z C Rd := Rn ^ Operand2 BIC {cond}{s} Rd, Rn, <Operand2> N Z C Rd := Rn & (~ Operand2) 비교명령어 Assembler updates Action CMP{cond} Rn, <Operand2> N Z C V Update CPSR flags on Rn Operand2 CMN {cond} Rn, <Operand2> N Z C V Update CPSR flags on Rn + Operand2 TST {cond} Rn, <Operand2> N Z C Update CPSR flags on Rn & Operand2 TEQ {cond} Rn, <Operand2> N Z C Update CPSR flags on Rn ^ Operand2

ARM 프로그래밍모델 ( 계속 ) 데이터이동 ( 초기값설정및레지스터간이동 ) MOV r0, r1 ; r0 r1 MOVS r2, #10 ; r2 10 MVNEQ r1, #0 ; if Z=1 then r1 0xffffffff Assembler S updates Action MOV{cond}{S} Rd, <Operand2> N Z C Rd := Operand2 MVN{cond}{S} Rd, <Operand2> N Z C Rd := ~ Operand2

ARM 프로그래밍모델 ( 계속 ) 데이터적재 - 저장 ([LDR STR]{cond}{size} Rd, <address> 주소지정방식 : PC-relative, Pre-indexed, Post-indexed LDR r1, =0x12345678 LDR r0, [r1, #4]! ; r0 mem[r1+4], r1 r1+4 LDR r0, [r1, #4] ; r0 mem[r1+4] LDR r0, [r1], #4 ; r0 mem[r1], r1 r1+4 Assembler Description Action LDR 워드를레지스터로적재 Rd := mem32[addr] STR 레지스터값을저장 mem32[addr] := Rd LDRH 반워드를레지스터로적재 Rd := mem16[addr] STRH 레지스터반워드를저장 mem16[addr] := Rd LDRSH 부호화된반워드를레지스터로적재 Rd := 부호확장 (mem16[addr]) LDRB 바이트를레지스터로적재 Rd := mem8[addr] STRB 레지스터바이트를저장 mem8[addr] := Rd ADR 레지스터에어드레스값설정 ( 의사명령어 ) Rd=addr

ARM 프로그래밍모델 ( 계속 ) 제어이동 ( 분기 ) If-then-else 구조, 루프, 함수호출등에사용 BL 명령어는복귀주소를 R14 (Link Register 에저장 ) 분기주소는 PC+offset 임 (PC-relative addressing) Offset 의경우최상위비트를부호로하고, 나머지 23 비트를 2 비트왼쪽쉬프트해서옵셋크기표현 31 28 27 25 24 23 0 cond 1 0 1 L 24-bit signed word offset 0: Branch 1: Branch with Link Assembler Action B{cond} label BL{cond} label R15 := label R14 := address of next instruction, R15 := label

ARM 프로그래밍모델 ( 계속 ) 조건코드 (condition code) Opcode[31:28] Suffix CPSR flags Description 0000 EQ Z set Equal/equals zero 0001 NE Z clear Not equal 0010 CS/HS C set Unsigned higher or same 0011 CC/LO C clear Unsigned lower 0100 MI N set Minus/Negative 0101 PL N clear Plus/Positive or Zero 0110 VS V set Overflow 0111 VC V clear No overflow 1000 HI C set and Z clear Unsigned higher 1001 LS C clear Unsigned lower 1010 GE N equals V Signed greater or equal 1011 LT N is not equal to V Signed less than 1100 GT (Z clear) and (N equals v) Signed greater than 1101 LE (Z set) or (N not equal to V) Signed less than or equal 1110 AL Ignored Always

ARM 프로그램예제 LDR r0, [r1] r1=0x100 이면메모리위치 0x100 에있는값을가져와서 r0 에넣는다. STR r0, [r1] r0 의내용을 r1 이가리키는메모리위치에저장한다. LDR r0, [r1-r2] (r1-r2) 에해당하는메모리위치에서데이터를읽어 r0 에적재한다. LDR r0, [r1, #4] (r1+4) 에해당하는메모리위치에서데이터를읽어 r0 에적재한다.

ARM 프로그램예제 x=(a+b)-c 를 ARM 어셈블리어로구현 r0 를 a 에, r1 을 b 에, r2 를 c 에, r3 를 x 에사용한다. 각변수의값을적재하기위해서 r4 를이용해서간접어드레싱을구현한다 ADR r4, a ; a 의주소를얻는다 LDR r0, [r4] ; a 의값을얻는다 ADR r4, b ; b 의주소를얻는다 LDR r1, [r4] ; b 의값을얻는다 ADD r3, r0, r1 ; a+b 의중간계산값을계산한다 ADR r4, c ; c 의주소를얻는다 LDR r2, [r4] ; c 의값을얻는다 SUB r3, r3, r2 ; x 의계산을완성한다 ADR r4, x ; x 의주소를얻는다 37 STR r3, [r4] ; x 의값을저장한다

ARM 프로그램예제 (if-then-else) ; 계산하고조건을검사한다 ADR r4, a ; a를위한주소를얻는다. LDR r0, [r4] ; a의값을얻는다. ADR r4, b ; b를위한주소를얻는다. LDR r1, [r4] ; b의값을얻는다. CMP r0, r1 ; a 와 b 비교 ( 결과는 CPSR 저장 ) BGE fblock ; 만일 a>=b 면 fblock으로분기 ; true (a < b) MOV r0, #5 ; x를위한값 ADR r4, x ; x를위한주소를얻는다. STR r0, [r4] ; x의값을얻는다. ADR r4, c ; c를위한주소를얻는다. LDR r0, [r4] ; c의값을얻는다. ADR r4, d ; d를위한주소를얻는다. LDR r1, [r4] ; d의값을얻는다. ADD r0, r0, r1 ; a+b를계산한다. ADR r4, y ; y를위한주소를얻는다. STR r0, [r4] ; y의값을저장한다. B after ; false 블록다음으로분기 if (a<b) { x = 5; y = c+d; } else x = c-d; ; false (a >= b) fblock ADR r4, c ; c를위한주소를얻는다. LDR r0, [r4] ; c의값을얻는다. ADR r4, d ; d를위한주소를얻는다. LDR r1, [r4] ; d의값을얻는다. SUB r0, r0, r1 ; a-b를계산한다. ADR r4, x ; x를위한주소를얻는다. STR r0, [r4] ; x의값을저장한다. after

ARM 프로그램예제 (if-then-else) ; 계산하고조건을검사한다 ADR r4, a ; a를위한주소를얻는다. LDR r0, [r4] ; a의값을얻는다. ADR r4, b ; b를위한주소를얻는다. LDR r1, [r4] ; b의값을얻는다. CMP r0, r1 ; a 와 b 비교 ( 결과는 CPSR 저장 ) ; 분기명령이여기에없다. ; true 블록 (a < b)-모두조건부명령 ( LT ) MOVLT r0, #5 ; x를위한값 ADRLT r4, x ; x를위한주소를얻는다. STRLT r0, [r4] ; x의값을얻는다. ADRLT r4, c ; c를위한주소를얻는다. LDRLT r0, [r4] ; c의값을얻는다. ADRLT r4, d ; d를위한주소를얻는다. LDRLT r1, [r4] ; d의값을얻는다. ADDLT r0, r0, r1 ; a+b를계산한다. ADRLT r4, y ; y를위한주소를얻는다. STRLT r0, [r4] ; y의값을저장한다. ; false 블록을돌아갈분기명령불필요 if (a<b) { x = 5; y = c+d; } else x = c-d; 조건부명령사용 ( 효과는?) ; false 블록 (a>=b)-모두조건부명령 ( GE ) ADRGE r4, c ; c를위한주소를얻는다. LDRGE r0, [r4] ; c의값을얻는다. ADRGE r4, d ; d를위한주소를얻는다. LDRGE r1, [r4] ; d의값을얻는다. SUBGE r0, r0, r1 ; a-b를계산한다. ADRGE r4, x ; x를위한주소를얻는다. STRGE r0, [r4] ; x의값을저장한다.

ARM 프로그램예제 (switch) 다음 C 프로그램의 switch 문을 ARM 어셈블리어로구현하라. switch (test) { case 0:... break; case 1:... break;... } ADR r2, test ; test를위한주소를얻는다. LDR r0, [r2] ; test의값을얻는다. ADR r1, switchtab ; switchtab을위한주소를얻는다. LDR r15, [r1, r0, LSL #2] ; 베이스 - 오프셋지정으로 PC 변경 switchtab DCD case0 ; 분기를위한주소표 DCD case1 case0 ; case0에대한코드 case1 ; case1에대한코드

ARM 프로그램예제 (for loop) 다음 C 프로그램의 for 문을 ARM 어셈블리어로구현하라. for (i=0; i<10 ; i++) { a[i]=0 } MOV r1, #0 ; a[i] 에저장할값 ( 0 ) ADR r2, a[0] ; MOV r0, #0 ; 초기루프인덱스 ( 0 ) 을 r0에저장 LOOP CMP r0, #10 ; i<10 인가? BGE EXIT ; 루프빠져나감 STR r1, [r2, r0, LSL #2] ; a[i]=0 ADD r0, r0, #1 ; i++ B LOOP EXIT 41

ARM 프로그램예제 ( 함수호출 ) 단순한함수호출 x = a + b; foo(x); y = c d; 프로시저호출을위해서는분기 - 링크명령어사용 BL foo 프로시저끝에서 r14 의내용을 r15(pc) 로옮기면복귀가수행 MOV r15, r14 중첩된함수호출 void f1 (int a) { f2(a); } void f2 (int r) { f3(r, 5); } void f3 (int x, int y) { g=x+y; } f3 f2 main() { f1(xyz); } 함수호출스택사용 (r14 의내용이파괴되기때문 ) f1