RealView Compilation Tools Assembler Guide
|
|
- 용준 영
- 6 years ago
- Views:
Transcription
1 RealView Compilation Tools 버전 3.1 어셈블러설명서 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
2 RealView Compilation Tools 어셈블러설명서 Copyright ARM Limited. All rights reserved. 릴리스정보 이설명서에서변경된내용은다음과같습니다. 변경내역 날짜 발행판 기밀상태 변경내용 2002년 8월 A 기밀문서아님 릴리스 년 1월 B 기밀문서아님 릴리스 년 9월 C 기밀문서아님 RVDS 버전 2.0용릴리스 년 1월 D 기밀문서아님 RVDS 버전 2.1용릴리스 년 12월 E 기밀문서아님 RVDS 버전 2.2용릴리스 년 5월 F 기밀문서아님 RVDS 버전 2.2 SP1용릴리스 년 3월 G 기밀문서아님 RVDS 버전 3.0용릴리스 년 3월 H 기밀문서아님 RVDS 버전 3.1용릴리스 3.1 소유권고지사항 또는 표시가있는단어와로고는 ARM Limited 소유의등록상표또는상표입니다. 이설명서에언급된기타브랜드와이름은해당소유자의상표일수있습니다. 이설명서에포함된전체또는일부정보나설명된제품은해당저작권소유자의사전서면승인없이는어떤형태로도개조되거나복제될수없습니다. 이설명서에설명된제품은지속적으로개발및개선될수있습니다. 이설명서에포함된모든제품명세와해당사용법은 ARM 의신뢰하에제공됩니다. 그러나 ARM 에서는상품성또는특정목적에의적합성을비롯하여그밖의묵시적이거나명시적인모든보증을부인합니다. 이설명서는제품사용자를지원하는용도로만만들어졌습니다. ARM Limited 는이설명서정보의사용, 정보의오류나누락또는제품의잘못된사용에따른어떠한손실이나손상도책임지지않습니다. ARM 이라는단어가사용되는경우 "ARM 이나해당하는자회사 " 를의미합니다. 기밀상태 이설명서는기밀문서가아닙니다. 이설명서의사용, 복사및공개에대한권한은 ARM 과 ARM 으로부터이설명서를제공받은당사자가동의한계약조건에따라라이센스제한의적용을받을수있습니다. 제품상태 이설명서의정보는개발이완료된제품에대한최종정보입니다. 웹주소 ii Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
3 목차 RealView Compilation Tools 어셈블러설명서 서문 설명서개요... viii 사용자의견... xii 1 장소개 1.1 RealView Compilation Tools 어셈블러개요 장 ARM 어셈블리언어작성 2.1 소개 ARM 아키텍처개요 어셈블리언어모듈의구조 조건부실행 레지스터에상수로드 레지스터에주소로드 다중레지스터로드및저장명령어 매크로사용 심볼버전추가 프레임지시문사용 어셈블리언어변경사항 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. iii
4 3장 어셈블러참조 3.1 명령구문 소스행형식 미리정의된레지스터및보조프로세서이름 기본제공변수및상수 심볼 식, 리터럴및연산자 진단메시지 C 사전처리기사용 장 ARM 및 Thumb 명령어 4.1 명령어요약 Thumb에서명령어너비선택 메모리액세스명령어 일반데이터처리명령어 곱하기명령어 포화명령어 병렬명령어 패킹및패킹해제명령어 분기명령어 보조프로세서명령어 기타제한 ThumbEE 명령어 의사명령어 장 NEON 및 VFP 프로그래밍 5.1 확장레지스터뱅크 조건코드 일반정보 NEON 및 VFP 공유명령어 NEON 논리및비교연산 NEON 일반데이터처리명령어 NEON 시프트명령어 NEON 일반산술명령어 NEON 곱하기명령어 NEON 요소및구조체로드 / 저장명령어 NEON 및 VFP 의사명령어 NEON 및 VFP 시스템레지스터 으로플러시모드 VFP 명령어 VFP 벡터모드 iv Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
5 6장 Wireless MMX 기술명령어 6.1 소개 Wireless MMX 기술에대한 ARM 지원 Wireless MMX 명령어 장 지시문참조 7.1 지시문의사전순목록 심볼정의지시문 데이터정의지시문 어셈블리제어지시문 프레임지시문 보고지시문 명령어세트및구문선택지시문 기타지시문 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. v
6 vi Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
7 서문 이서문에서는 RealView Compilation Tools 어셈블러설명서에대해소개합니다. 여기에는다음단원이포함되어있습니다. viii페이지의설명서개요 xii 페이지의사용자의견 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. vii
8 서문 설명서개요 이설명서에서는 RVCT(RealView Compilation Tools) 어셈블러에대한자습및참조정보를제공합니다. RVCT 어셈블러에는독립형어셈블러인 armasm 과 C 및 C++ 컴파일러의인라인어셈블러가있습니다. 이설명서에서는어셈블리언어프로그래머가사용할수있는어셈블러, 어셈블리언어니모닉, 의사명령어, 매크로및지시문에대한명령행옵션에대해설명합니다. 대상독자 이설명서는 RVCT 를사용하여응용프로그램을만들려는모든개발자를위한것입니다. 여기에서는사용자가경험있는소프트웨어개발자이고 RealView Compilation Tools 핵심설명서에설명된 ARM 개발도구에익숙하다고가정합니다. 설명서사용 이설명서는다음장으로구성되어있습니다. 1 장소개 이장에서는 RVCT 어셈블러및어셈블리언어에대해소개합니다. 2장 ARM 어셈블리언어작성이장에서는 ARM 어셈블러및어셈블리언어를사용하는데도움을주는자습정보를제공합니다. 3장어셈블러참조이장에서는 ARM 어셈블러에서제공하는언어의구문및구조에대한참조자료를제공합니다. 4장 ARM 및 Thumb 명령어이장에서는 ARM 및 Thumb(Thumb-2 및이전버전의 Thumb인 Thumb-2EE 포함 ) 명령어세트에대한참조자료를제공합니다. 5 장 NEON 및 VFP 프로그래밍 이장에서는 ARM NEON 기술및 VFP 명령어세트에대한참조자료를제공하고타사 VFP 관련어셈블리언어에대해서도설명합니다. viii Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
9 서문 6장 Wireless MMX 기술명령어이장에서는 Wireless MMX 기술의 ARM 지원에대한참조자료를제공합니다. 7장지시문참조이장에서는 ARM 어셈블러인 armasm에서사용할수있는어셈블러지시문에대한참조자료를제공합니다. 이설명서에서는 ARM 소프트웨어가기본위치 (Windows 의경우 volume:\program Files\ARM) 에설치되어있다고가정합니다. 예를들어 install_directory\documentation\... 과같은경로이름을참조할때 install_directory 는이위치를가리키는것으로가정합니다. ARM 소프트웨어를다른위치에설치한경우에는이위치를변경해야합니다. 표기규칙 이설명서에서는다음과같은표기규칙을사용합니다. 고정폭글꼴 고정폭글꼴 명령, 파일및프로그램이름, 소스코드와같이키보드로입력할수있는텍스트를나타냅니다. 명령또는옵션대신사용할수있는약어를나타냅니다. 밑줄이그어진텍스트는전체명령이나옵션이름대신입력할수있습니다. 고정폭기울임글꼴명령및함수의인수를나타냅니다. 인수는특정값으로대체할수있습니다. 고정폭굵은글꼴외부예제코드가사용될경우언어키워드를나타냅니다. 기울임글꼴중요한사항을강조표시하고, 특수용어를소개하며, 내부상호참조및인용부분을나타냅니다. 굵은글꼴 메뉴이름과같은인터페이스요소를강조표시합니다. 적절한경우설명목록의내용을강조할때와 ARM 프로세서신호이름을표시할때도사용됩니다. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. ix
10 서문 추가정보 이단원에는 ARM 계열프로세서용코드를개발하는데대한추가정보를제공하는 ARM Limited 및타사게시물목록이나와있습니다. ARM 에서는이설명서의내용을정기적으로업데이트하고수정합니다. 에서정오표, 추가목록및 ARM FAQ 를참조하십시오. ARM 게시물 이설명서에는 RVCT와함께제공되는각개발도구에대한참조정보가포함되어있습니다. 이제품군에포함된다른게시물은다음과같습니다. RVCT 핵심설명서 (ARM DUI 0202) RVCT 컴파일러사용설명서 (ARM DUI 0205) RVCT Compiler Reference Guide(ARM DUI 0348) RVCT Libraries and Floating Point Support Guide(ARM DUI 0349) RVCT 링커및유틸리티설명서 (ARM DUI 0206) RVCT 개발자설명서 (ARM DUI 0203) NEON Vectorizing Compiler Guide(ARMDUI 0350) RealView Development Suite 용어집 (ARM DUI 0324) ARM 에서지원하는기본표준, 소프트웨어인터페이스및기타표준에대한자세한내용은 install_directory\documentation\specifications\... 에서볼수있습니다. 또한 ARM 제품과관련된구체적인내용은다음설명서를참조하십시오. ARM6-M Architecture Reference Manual(ARM DDI 0419) ARM7-M Architecture Reference Manual(ARM DDI 0403) ARM Architecture Reference Manual, ARMv7-A and ARMv7-R edition(arm DDI 0406) ARM Architecture Reference Manual Thumb - 2 Supplement(ARM DDI 0308) ARM Architecture Reference Manual Security Extensions Supplement(ARM DDI 0309) ARM Architecture Reference Manual Thumb-2 Execution Environment Supplement(ARM DDI 0397) ARM Architecture Reference Manual Advanced SIMD Extensions and VFPv3 Supplement(ARM DDI 0268) x Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
11 서문 ARM Reference Peripheral Specification(ARM DDI 0062) 하드웨어장치에대한 ARM 데이터시트또는기술참조문서 기타게시물 ARM 아키텍처에대한소개는 ARM system-on-chip 구조 (Steve Furber 저, 나종화등역, 홍릉과학출판사, 2005 년, ISBN ) 를참조하십시오. Intel Wireless MMX 기술에대한자세한내용은 에서 Wireless MMX Technology Developer Guide(2000 년 8 월, Order Number: ) 를참조하십시오. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. xi
12 서문 사용자의견 RealView Compilation Tools 및설명서에대한의견이있으시면 ARM Limited 에언제든알려주시기바랍니다. RealView Compilation Tools 에대한의견 RVCT 와관련된문제가있으시면해당공급업체에문의하십시오. 문의시다음사항을함께알려주시면보다신속하고유용한답변을받으실수있습니다. 사용자이름및회사 제품일련번호 사용중인릴리스정보 실행중인플랫폼의세부사항 ( 예 : 하드웨어플랫폼, 운영체제종류및버전 ) 문제를재현하는작은독립실행형코드샘플 의도한결과와실제로발생한결과에대한명확한설명 사용한명령 ( 명령행옵션포함 ) 문제를보여주는샘플출력 도구의버전문자열 ( 버전번호및빌드번호포함 ) 설명서에대한사용자의견 이설명서에오류나누락이있으면다음사항을기재하여 errata@arm.com으로전자메일을보내주시기바랍니다. 설명서제목 설명서번호 문의내용에해당하는페이지번호 문제에대한간략한설명 추가및향상되었으면하는기능에대한일반적인제안도환영합니다. xii Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
13 1 장소개 이장에서는 RVCT(RealView Compilation Tools) 와함께제공되는어셈블러에대해소개합니다. 이장에는다음단원이포함되어있습니다. 1-2페이지의 RealView Compilation Tools 어셈블러개요 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 1-1
14 소개 1.1 RealView Compilation Tools 어셈블러개요 RVCT 에는다음구성요소가포함되어있습니다. 독립형어셈블러인 armasm( 이설명서에서설명함 ) C 및 C++ 컴파일러에기본적으로제공된, 최적화기능이있는인라인어셈블러와최적화기능이없는임베디드어셈블러. 이러한어셈블러는동일한구문을사용하여어셈블리명령어를처리합니다. 이설명서에서는이두어셈블러에대해설명하지않습니다. 인라인및임베디드어셈블러에대한자세한내용은 RealView Compilation Tools 개발자설명서에서 C, C++ 및어셈블리언어조합장을참조하십시오. 이전릴리스의 RVCT 에서업그레이드하는경우에는 RealView Compilation Tools 핵심설명서에서이릴리스의새기능과향상된기능에대한세부정보를읽어보십시오 ARM 어셈블리언어 이전버전의 ARM 및 Thumb 어셈블러언어가최신 ARM/Thumb 어셈블러언어로대체되었습니다. 최신언어로작성된코드는 ARM, Thumb 또는 Thumb-2 명령어용으로어셈블할수있습니다. 어셈블러에서지원되지않는명령어를사용하면오류가발생합니다 Wireless MMX 기술명령어 어셈블러는 PXA270 프로세서에서실행할코드를어셈블할수있도록 Intel Wireless MMX 기술명령어를지원합니다. 이프로세서는 MMX 확장을사용하여 ARMv5TE 아키텍처를구현합니다. RVCT 에는 Wireless MMX 기술제어및 SIMD(Single Instruction Multiple Data) 데이터레지스터에대한지원뿐아니라 Wireless MMX 기술개발을위한새로운지시문이포함되어있습니다. 여기에는로드및저장명령어에대한향상된지원도포함되어있습니다. RVCT 의 Wireless MMX 기술지원에대한자세한내용은 6 장 Wireless MMX 기술명령어를참조하십시오. 1-2 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
15 소개 NEON 기술 ARM NEON 기술은 ARMv7 아키텍처의선택적구성요소로서, 고급미디어및신호처리응용프로그램과임베디드프로세서를대상으로하는 64/128 비트복합 SIMD 기술입니다. 이기술은 ARM 코어의일부로구현되지만자체실행파이프라인이있으며 ARM 코어레지스터뱅크와는별도의레지스터뱅크가있습니다. NEON 은정수, 고정소수점및단정밀도부동소수점 SIMD 연산을지원합니다. 이러한명령어는 ARM 과 Thumb-2 모두에서사용할수있습니다. NEON 에대한자세한내용은 5 장 NEON 및 VFP 프로그래밍을참조하십시오 예제사용 이설명서에서는 RealView Development Suite 와함께제공되는예제를참조합니다. 이러한예제는주예제디렉토리인 install_directory\rvds\examples 에있습니다. 제공된예제에대한요약정보는 RealView Development Suite 시작설명서를참조하십시오. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 1-3
16 소개 1-4 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
17 2 장 ARM 어셈블리언어작성 이장에서는 ARM 어셈블리언어를작성하는일반원칙에대해소개합니다. 여기에는다음단원이포함되어있습니다. 2-2페이지의소개 2-3 페이지의 ARM 아키텍처개요 2-13 페이지의어셈블리언어모듈의구조 2-21 페이지의조건부실행 2-30 페이지의레지스터에상수로드 2-39 페이지의레지스터에주소로드 2-45 페이지의다중레지스터로드및저장명령어 2-51 페이지의매크로사용 2-55 페이지의심볼버전추가 2-56 페이지의프레임지시문사용 2-57 페이지의어셈블리언어변경사항 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-1
18 ARM 어셈블리언어작성 2.1 소개 이장에서는 ARM 어셈블리언어모듈을작성하는방법에대한기본적이고실제적인이해를제공하며 ARM 어셈블러 (armasm) 에서제공하는기능에대해서도설명합니다. 이장에서는 ARM, Thumb - 2, Thumb, NEON, VFP 또는 MMX 명령어세트에대해자세히설명하지않습니다. 이러한명령어세트에대한자세한내용은다음을참조하십시오. 4장 ARM 및 Thumb 명령어 5 장 NEON 및 VFP 프로그래밍 6 장 Wireless MMX 기술명령어 자세한내용은 ARM 아키텍처참조문서를참조하십시오. RVCT2.1 및이전버전에서허용되는 ARM 및 Thumb 어셈블리언어에익숙한프로그래머가간편하게사용할수있도록이장에는이러한언어와최신버전의 RVCT2.1 어셈블리언어간차이점을설명하는단원이포함되어있습니다. 자세한내용은 2-57 페이지의어셈블리언어변경사항을참조하십시오 코드예제 이장에서는여러가지코드예제를제공합니다. 이러한코드예제대부분은 install_directory\rvds\examples\...\asm 디렉토리에있습니다. 다음단계에따라어셈블리언어파일을빌드하고링크합니다. 1. 명령프롬프트에 armasm --debug filename.s 를입력하여파일을어셈블하고디버그테이블을생성합니다. 2. armlink filename.o -o filename 을입력하여개체파일을링크하고 ELF 실행이미지를생성합니다. 이미지를실행하고디버깅하려면 RVISS(RealView Instruction Set Simulator) 와같은적절한디버그타겟을사용하여 RealView Debugger 와같은호환디버거로이미지를로드합니다. 어셈블러에서소스코드를변환하는방법을보려면다음을입력하십시오. fromelf -c filename.o armlink 및 fromelf 에대한자세한내용은 RealView Compilation Tools 링커및유틸리티설명서를참조하십시오. 2-2 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
19 ARM 어셈블리언어작성 2.2 ARM 아키텍처개요 이단원에서는 ARM 아키텍처개요에대해간략히설명합니다. ARM 프로세서는로드 / 저장아키텍처를구현하므로일반적인 RISC 프로세서입니다. 로드및저장명령어만메모리에액세스할수있고데이터처리명령어는레지스터내용에대해서만작동합니다. 이단원에서는다음내용을설명합니다. 아키텍처버전 ARM, Thumb, Thumb-2 및 Thumb-2EE 명령어세트 2-4 페이지의 ARM, Thumb 및 ThumbEE 상태 2-5 페이지의프로세서모드 2-6 페이지의레지스터 2-9 페이지의명령어세트개요 2-10 페이지의명령어기능 아키텍처버전 이설명서의정보와예제에서는 ARMv4 이상을구현하는프로세서를사용하고있다고가정합니다. 이러한모든프로세서에는 32 비트주소지정범위가있습니다. 다양한아키텍처버전에대한자세한내용은 ARM 아키텍처참조문서를참조하십시오 ARM, Thumb, Thumb-2 및 Thumb-2EE 명령어세트 ARM 명령어세트는포괄적인범위의연산을제공하는 32 비트명령어세트입니다. ARMv4T 이상에서는 Thumb 명령어세트라는 16 비트명령어세트를정의합니다. 32 비트 ARM 명령어세트의기능대부분을사용할수있지만일부연산에는추가명령어가필요합니다. Thumb 명령어세트에서는성능이저하되는대신향상된코드밀도를제공합니다. ARMv6T2 는 Thumb 명령어세트가크게향상된 Thumb-2 를정의합니다. Thumb-2 는 ARM 명령어세트와거의동일한기능을제공합니다. 또한 16 비트명령어와 32 비트명령어를모두포함하며성능은 ARM 코드와비슷하지만코드밀도는 Thumb 코드와비슷합니다. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-3
20 ARM 어셈블리언어작성 ARMv6 이상에서는모든 ARM 및 Thumb 명령어가리틀엔디안이고 ARMv6T2 이상에서는모든 Thumb-2 명령어페치가리틀엔디안입니다. ARMv7 에서는 Thumb-2EE(Thumb-2 Execution Environment) 를정의합니다. Thumb-2EE 명령어세트는 Thumb-2 를기반으로하지만, 동적으로생성되는코드, 즉실행직전이나실행중에장치에서컴파일되는코드에보다적합한타겟이되도록몇가지사항을변경하고추가한것입니다. 자세한내용은 2-9 페이지의명령어세트개요를참조하십시오 ARM, Thumb 및 ThumbEE 상태 ARM 명령어를실행하는프로세서는 ARM 상태에서작동하고 Thumb 명령어를실행하는프로세서는 Thumb 상태에서작동합니다. 특정상태의프로세서는다른명령어세트의명령어를실행할수없습니다. 예를들어 ARM 상태의프로세서는 Thumb 명령어를실행할수없고 Thumb 상태의프로세서는 ARM 명령어를실행할수없습니다. 따라서프로세서에서현재상태와맞지않는명령어세트의명령어를수신하지않도록해야합니다. 대부분의 ARM 프로세서는항상 ARM 상태에서코드실행을시작합니다. 그러나일부프로세서의경우 Thumb 코드만실행할수있거나 Thumb 상태에서시작하도록구성할수있습니다. ThumbEE 에는 ThumbEE 상태라는새로운명령어세트상태가도입되었습니다. 이상태에서는명령어가 ThumbEE 명령어세트에정의된대로실행됩니다. 상태변경 각명령어세트에는프로세서상태를변경하는명령어가포함되어있습니다. ARM 상태와 Thumb 상태간에전환하려면 ARM 또는 THUMB 지시문을통해올바른 opcode 를생성하도록어셈블러모드를전환해야합니다. Thumb-2EE 코드를생성하려면 THUMBX 를사용합니다. CODE32 및 CODE16 을사용하는어셈블러코드는어셈블러에서계속어셈블할수있지만새코드에대해서는 ARM 및 THUMB 을사용하는것이좋습니다. 자세한내용은 7-63 페이지의명령어세트및구문선택지시문을참조하십시오. 2-4 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
21 ARM 어셈블리언어작성 프로세서모드 ARM 프로세서에서는아키텍처버전에따라다양한프로세서모드를지원합니다 ( 표 2-1 참조 ). 참고 ARMv7-M 은다른 ARM 프로세서와동일한모드를지원하지않습니다. 이단원은 ARMv7-M 에는적용되지않습니다. 표 2-1 ARM 프로세서모드 프로세서모드 아키텍처 모드번호 사용자 모두 0b10000 FIQ - 고속인터럽트요청 모두 0b10001 IRQ - 인터럽트요청 모두 0b10010 관리자 모두 0b10011 abort 모두 0b10111 정의되지않음 모두 0b11011 시스템 ARMv4 이상 0b11111 모니터 보안확장에만해당 0b10110 사용자모드를제외한모든모드를권한모드라고합니다. 이러한모드에서는시스템리소스에대한모든액세스권한이제공되고모드를자유롭게변경할수있습니다. 작업보호가필요한응용프로그램은일반적으로사용자모드에서실행됩니다. 일부임베디드응용프로그램은전적으로관리자또는시스템모드에서실행될수있습니다. 사용자모드이외의모드에서는예외를처리하거나권한있는리소스에액세스합니다 (RealView Compilation Tools 개발자설명서의 6 장프로세서예외처리장참조 ). ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-5
22 ARM 어셈블리언어작성 레지스터 ARM 프로세서에는 37 개의레지스터가있습니다. 이러한레지스터는뱅크의일부가서로겹치는방식으로정렬됩니다. 레지스터뱅크는프로세서모드에따라서로다릅니다. 뱅크레지스터는신속한컨텍스트전환을통해프로세서예외와권한있는연산을처리할수있도록합니다. 레지스터가뱅크되는방법에대한자세한내용은 ARM 아키텍처참조문서를참조하십시오. 다음레지스터를사용할수있습니다. 30개의범용 32비트레지스터 PC( 프로그램카운터 ) 2-7페이지의 APSR( 응용프로그램상태레지스터 ) 2-8페이지의 SPSR( 저장된프로그램상태레지스터 ) 30 개의범용 32 비트레지스터 15 개의범용레지스터는현재프로세서모드에따라한번씩 r0, r1,... r13, r14 로표시됩니다. r13 은스택포인터 (sp) 입니다. C 및 C++ 컴파일러에서는항상 r13 을스택포인터로사용합니다. Thumb-2 에서는 sp 가스택포인터로엄격하게정의되기때문에 r13 이사용될경우스택조작에도움이되지않는여러명령어는예상할수없는결과를낼수있습니다. sp 는범용레지스터로사용하지않는것이좋습니다. 사용자모드에서 r14 는링크레지스터 (lr) 로사용되어하위루틴호출이수행될때반환주소를저장합니다. 또한반환주소가스택에저장될경우범용레지스터로사용될수도있습니다. 예외처리모드에서 r14 는예외반환주소나하위루틴반환주소 ( 하위루틴호출이예외내에서실행될경우 ) 를저장합니다. 또한반환주소가스택에저장될경우범용레지스터로사용될수도있습니다. PC( 프로그램카운터 ) 프로그램카운터는 r15 또는 pc 로액세스되며, ARM 상태에있는각명령어에대해 1 워드 (4 바이트 ) 씩증가하거나 Thumb 상태에서실행되는명령어의크기만큼증가합니다. 분기명령어는대상주소를 pc 로로드합니다. 또한데이터연산명령어를사용하면 PC 를직접로드할수도있습니다. 예를들어하위루틴에서복귀하려면다음을사용하여링크레지스터를 PC 로복사할수있습니다. MOV pc,lr 2-6 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
23 ARM 어셈블리언어작성 실행하는동안 r15(pc) 는현재실행되는명령어의주소를포함하지않습니다. 현재실행되는명령어의주소는일반적으로 ARM 의경우 pc-8 이거나 Thumb 의경우 pc-4 입니다. APSR( 응용프로그램상태레지스터 ) APSR 은 ALU( 산술논리단위 ) 상태플래그의복사본을포함하며, 조건부명령어의실행여부를결정하는데사용됩니다. 자세한내용은 2-21 페이지의조건부실행을참조하십시오. ARMv5TE 및 ARMv6 이상에서는 APSR 에 Q 플래그도포함됩니다 (2-22 페이지의 ALU 상태플래그참조 ). ARMv6 에서는 APSR 에 GE 플래그도포함됩니다 (4-102 페이지의병렬더하기및빼기참조 ). 이러한플래그에는 MSR 및 MRS 명령어를사용하여모든모드에서액세스할수있습니다. 자세한내용은 페이지의 MRS 및 페이지의 MSR 을참조하십시오. CPSR( 현재프로그램상태레지스터 ) CPSR에는다음이포함됩니다. APSR 플래그 현재프로세서모드 인터럽트비활성화플래그 Thumb 사용가능또는 Jazelle 사용가능프로세서에서는 CPSR 에현재프로세서상태 (ARM, Thumb, ThumbEE 또는 Jazelle) 도포함됩니다. ARMv6T2 이상에서는 Thumb-2 의 CPSR 에새로운상태비트가도입되었습니다. 이러한비트는 IT 명령어에서 IT 블록의조건부실행을제어하는데사용됩니다 (4-71 페이지의 IT 참조 ). APSR 플래그만모든모드에서액세스할수있고 CPSR 의나머지비트에는 MSR 및 MRS 명령어를사용하여권한모드에서만액세스할수있습니다. 자세한내용은 페이지의 MRS 및 페이지의 MSR 을참조하십시오. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-7
24 ARM 어셈블리언어작성 SPSR( 저장된프로그램상태레지스터 ) SPSR 은예외가발생할때 CPSR 을저장하는데사용됩니다. 각예외처리모드에서는하나의 SPSR 에액세스할수있습니다. 사용자모드와시스템모드는예외처리모드가아니므로 SPSR 을가지고있지않습니다. 자세한내용은 RealView Compilation Tools 개발자설명서에서 6 장프로세서예외처리를참조하십시오. 2-8 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
25 ARM 어셈블리언어작성 명령어세트개요 모든 ARM 명령어의길이는 32 비트입니다. 명령어는워드로정렬된채저장되므로 ARM 상태에서명령어주소의최하위 2 비트는항상 0 입니다. Thumb, Thumb-2 및 Thumb-2EE 명령어의길이는 16 비트또는 32 비트입니다. 명령어는하프워드로정렬된채저장됩니다. 일부명령어는최하위비트를사용하여분기되는코드가 Thumb 코드인지아니면 ARM 코드인지여부를확인합니다. Thumb-2 가도입되기전에 Thumb 명령어세트는 ARM 명령어세트의제한된하위기능세트로제한되었으며거의모든 Thumb 명령어가 16 비트였습니다. Thumb-2 명령어세트기능은 ARM 명령어세트기능과거의같습니다. ARM 및 Thumb 명령어구문에대한자세한내용은 4 장 ARM 및 Thumb 명령어를참조하십시오. ARM 및 Thumb 명령어는다음과같은여러기능그룹으로분류할수있습니다. 분기명령어 데이터처리명령어 2-10페이지의레지스터로드및저장명령어 2-10 페이지의다중레지스터로드및저장명령어 2-10 페이지의상태레지스터액세스명령어 2-10 페이지의보조프로세서명령어 분기명령어이러한명령어를사용하면다음을수행할수있습니다. 루프형성을위한역방향분기 조건부구조체에서정방향분기 하위루틴으로분기 ARM과 Thumb 사이에서프로세서상태전환 데이터처리명령어 이러한명령어는범용레지스터에서작동하며, 두레지스터의내용에대해더하기, 빼기또는비트단위논리와같은연산을수행하고결과를세번째레지스터에배치합니다. 이러한명령어는단일레지스터내의값을연산하거나레지스터값과명령어내에제공된상수 ( 즉치값 ) 를연산할수도있습니다. Long 곱하기명령어는두개의레지스터에 64 비트결과를제공합니다. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-9
26 ARM 어셈블리언어작성 레지스터로드및저장명령어 이러한명령어는단일레지스터값을메모리에서로드하거나메모리에저장하며, 32 비트워드, 16 비트하프워드또는 8 비트부호없는바이트를로드하거나저장할수있습니다. 바이트및하프워드로드는 32 비트레지스터를채우도록부호확장또는 0 확장됩니다. 이외에도 64 비트더블워드값을두개의 32 비트레지스터에로드하거나저장할수있는몇가지명령어가정의되어있습니다. 다중레지스터로드및저장명령어 이러한명령어는범용레지스터의하위세트를메모리에서로드하거나메모리에저장합니다. 이러한명령어에대한자세한내용은 2-45 페이지의다중레지스터로드및저장명령어를참조하십시오. 상태레지스터액세스명령어 이러한명령어는상태레지스터와범용레지스터간에내용을이동합니다. 보조프로세서명령어 이러한명령어는 ARM 아키텍처를확장하는일반적인방법을지원합니다 명령어기능 이단원에는다음소단원이포함되어있습니다. 조건부실행 2-11페이지의레지스터액세스 2-11페이지의인라인배럴시프터에액세스 조건부실행 거의모든 ARM 명령어는 APSR 의 ALU 상태플래그값에대해조건부로실행될수있습니다. 일련의명령어에동일한조건을적용할경우성능이향상될수있지만반드시분기를사용하여조건부명령어를건너뛰어야하는것은아닙니다. Thumb-2 가없는프로세서의 Thumb 상태에서조건부실행을위한유일한메커니즘은조건부분기뿐입니다. 대부분의데이터처리명령어는 ALU 플래그를업데이트합니다. 일반적으로명령어가 ALU 플래그상태를업데이트할지여부는지정할수없습니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
27 ARM 어셈블리언어작성 Thumb-2 는 IT(If-Then) 명령어와동일한 ALU 플래그를사용하여조건부실행을위한대체메커니즘을제공합니다. IT 는최대네개까지다음과같은명령어의조건부실행을제공하는 16 비트명령어입니다. 이외에도조건부실행을위한추가메커니즘을제공하는여러명령어가있습니다. ARM 및 Thumb-2 코드에서는데이터처리명령어가 ALU 플래그를업데이트할지여부를지정할수있습니다. 한명령어로설정된플래그를사용하여중간에여러플래그비설정명령어가있는경우에도다른명령어의실행을제어할수있습니다. 자세한내용은 2-21 페이지의조건부실행을참조하십시오. 레지스터액세스 ARM 상태에서는모든명령어가 r0 ~ r14 에액세스할수있으며, 이중대부분의명령어가 r15(pc) 에액세스할수있습니다. MRS 및 MSR 명령어는상태레지스터의내용을범용레지스터로이동할수있고이레지스터에서일반데이터처리연산을사용하여내용을조작할수있습니다. 자세한내용은 페이지의 MRS 및 페이지의 MSR 을참조하십시오. Thumb-2 프로세서의 Thumb 상태에서는유용하지않을경우 r13 및 r15 에대한일부액세스가허용되지않는다는점을제외하고동일한기능을제공합니다. Thumb-2 가없는프로세서의 Thumb 상태에서는대부분의명령어가 r0 ~ o r7 에만액세스할수있고적은수의명령어만 r8 ~ r15 에액세스할수있습니다. 레지스터 r0 ~ r7 은 Lo 레지스터라고하고레지스터 r8 ~ r15 는 Hi 레지스터라고합니다. 인라인배럴시프터에액세스 ARM 산술논리단위에는시프트및회전연산을수행할수있는 32비트배럴시프터가있습니다. 모든 ARM 및 Thumb-2 데이터처리와단일레지스터데이터전송명령어에대한두번째연산은데이터처리나데이터전송이실행되기전에명령어의일부로시프트할수있습니다. 이기능은다음을지원하며이에제한되지않습니다. 스케일된주소지정 상수로곱하기 상수생성 배럴시프터를사용하여상수를생성하는방법에대한자세한내용은 2-30 페이지의레지스터에상수로드를참조하십시오. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-11
28 ARM 어셈블리언어작성 Thumb-2 명령어는 ARM 명령어와거의동일한배럴시프터에대한액세스를제공합니다. 16 비트 Thumb 명령어세트는별도의명령어를통해서만배럴시프터에액세스할수있습니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
29 ARM 어셈블리언어작성 2.3 어셈블리언어모듈의구조 어셈블리언어는 ARM 어셈블러 (armasm) 에서구문분석하고어셈블하여개체코드를생성하는언어입니다. 기본적으로어셈블러에서는소스코드를 ARM 어셈블리언어로작성하도록요구합니다. armasm 에서는이전버전의 ARM 어셈블리언어로작성된소스코드를실행할수있습니다. 이경우이를알리지않아도됩니다. 또한 armasm 에서는이전 Thumb 어셈블리언어로작성된소스코드를실행할수도있습니다. 이경우 --16 명령행옵션이나소스코드의 CODE16 지시문사용하여 armasm 에이를알려야합니다. 이전 Thumb 어셈블리언어는 Thumb-2 명령어를지원하지않습니다. 이단원에서는다음내용을설명합니다. 어셈블리언어소스파일레이아웃 2-17페이지의 ARM 어셈블리언어모듈예제 2-19 페이지의하위루틴호출 어셈블리언어소스파일레이아웃 어셈블리언어의일반적인소스행형식은다음과같습니다. {label} {instruction directive pseudo-instruction} {;comment} 참고 레이블이없는경우에도명령어, 의사명령어및지시문앞에는공백이나탭이한칸있어야합니다. 소스행의세부분은모두선택적입니다. 빈행을사용하여코드를읽기쉽게만들수있습니다. 대소문자규칙 명령어니모닉, 지시문및심볼레지스터이름은대문자나소문자중하나로만작성할수있고대소문자를모두사용하여작성할수는없습니다. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-13
30 ARM 어셈블리언어작성 행길이 소스파일을읽기쉽게만들려면행끝에백슬래시문자 (\) 를배치하여긴소스행을여러행으로분할할수있습니다. 백슬래시뒤에는공백과탭을포함하여다른문자가오면안됩니다. 어셈블러에서는백슬래시 / 행끝시퀀스를공백으로처리합니다. 참고 백슬래시 / 행끝시퀀스를따옴표로묶인문자열내에사용하면안됩니다. 백슬래시를사용하는확장을포함하여행길이제한은 4095 자입니다. 레이블 레이블은주소를나타내는심볼입니다. 레이블로지정된주소는어셈블리동안계산됩니다. 어셈블러에서는레이블이정의된섹션의원점을기준으로레이블주소를계산합니다. 같은섹션내에있는레이블에대한참조는오프셋을더하거나뺀 PC 를사용할수있습니다. 이작업을프로그램기준주소지정이라고합니다. 다른섹션의레이블주소는링커가각섹션에대해특정메모리위치를할당한경우링크타임에계산됩니다. 지역레이블 지역레이블은레이블의하위클래스로, 0 ~ 99 범위에있는숫자로시작합니다. 다른레이블과달리지역레이블은여러번정의할수있습니다. 지역레이블은매크로를통해레이블을생성하는경우유용합니다. 어셈블러에서는지역레이블에대한참조를찾으면이참조를지역레이블의주변인스턴스에링크합니다. 지역레이블범위는 AREA 지시문으로제한되지않습니다. ROUT 지시문을사용하면범위를보다엄격하게제한할수있습니다. 다음에대한자세한내용은 3-29페이지의지역레이블을참조하십시오. 지역레이블선언구문 어셈블러에서지역레이블에대한참조를해당레이블에연결하는방법 2-14 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
31 ARM 어셈블리언어작성 주석 행의첫번째세미콜론은문자열상수내부에세미콜론이나타나는위치를제외하고주석의시작을표시합니다. 행끝은주석의끝입니다. 주석만으로하나의유효한행을구성할수있습니다. 어셈블러에서는모든주석을무시합니다. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-15
32 ARM 어셈블리언어작성 상수 상수는다음중하나일수있습니다. 숫자다음형식의숫자상수가허용됩니다. 10진수 ( 예 : 123) 16진수 ( 예 : 0x7B) n_xxx. 다음은이요소에대한설명입니다. n 2 와 9 사이의기수입니다. xxx 해당기수에있는숫자입니다. 부동소수점 ( 예 : 0.02, 또는 ) 부동소수점숫자는시스템에부동소수점을사용하는 VFP 또는 NEON이있는경우에만사용할수있습니다. 부울부울상수 TRUE 및 FALSE 는 {TRUE} 및 {FALSE} 로작성되어야합니다. 문자 문자열 문자상수는표준 C 이스케이프문자를사용하는이스케이프문자나단일문자를묶는열고닫는작은따옴표로구성됩니다. 문자열은문자와공백을묶는열고닫는큰따옴표로구성됩니다. 큰따옴표또는달러기호가문자열내에서리터럴텍스트문자로사용될경우에는해당문자를쌍으로표시되어야합니다. 예를들어문자열에하나의 $ 가필요하면 $$ 를사용해야합니다. 표준 C 이스케이프시퀀스는문자열상수내에서사용할수있습니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
33 ARM 어셈블리언어작성 ARM 어셈블리언어모듈예제 예제 2-1 에서는어셈블리언어모듈의일부핵심구성요소를보여줍니다. 이예제는 ARM 어셈블리언어로작성되었으며, 주예제디렉토리인 install_directory\rvds\examples 에 armex.s 로제공되어있습니다. 이예제를어셈블, 링크및실행하는방법에대한자세한내용은 2-2 페이지의코드예제를참조하십시오. 이예제의구성부분에대해서는다음단원에서자세히설명합니다. 예제 2-1 start stop AREA ENTRY ARMex, CODE, READONLY ; Name this block of code ARMex ; Mark first instruction to execute MOV r0, #10 ; Set up parameters MOV r1, #3 ADD r0, r0, r1 ; r0 = r0 + r1 MOV r0, #0x18 ; angel_swireason_reportexception LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SVC #0x ; ARM semihosting (formerly SWI) END ; Mark end of file ELF 섹션및 AREA 지시문 ELF 섹션은코드또는데이터의독립적이고명명된나눌수없는시퀀스입니다. 응용프로그램을만들려면최소한하나이상의코드섹션이있어야합니다. 어셈블리및컴파일의출력에는다음이포함될수있습니다. 하나이상의코드섹션으로, 대개읽기전용섹션입니다. 하나이상의데이터섹션으로, 대개읽기 / 쓰기섹션입니다. 이러한섹션은 0 으로초기화 (ZI) 될수있습니다. 링커는섹션배치규칙에따라각섹션을프로그램이미지에배치합니다. 소스파일의인접섹션이응용프로그램이미지에서도인접할필요는없습니다. 링커가섹션을배치하는방법에대한자세한내용은 RealView Compilation Tools 링커및유틸리티설명서에서 3 장기본링커기능사용을참조하십시오. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-17
34 ARM 어셈블리언어작성 소스파일에서 AREA 지시문은섹션의시작을표시합니다. 이지시문은섹션의이름을지정하고해당특성을설정합니다. 특성은이름뒤에배치되고쉼표로구분됩니다. AREA 지시문의구문에대한자세한내용은 7-69 페이지의 AREA 를참조하십시오. 아무이름이나선택할수있지만알파벳이외의문자로시작하는이름은막대로묶어야합니다. 그렇지않으면 AREA name missing 오류가생성됩니다. 예를들면 1_DataArea 와같습니다 페이지의예제 2-1 에서는코드를포함하고 READONLY 로표시되는 ARMex 라는단일섹션을정의합니다. ENTRY 지시문 ENTRY 지시문은실행되는첫번째명령어를표시합니다. C 코드를포함하는응용프로그램에서는진입점이 C 라이브러리초기화코드내에도포함되고초기화코드와예외처리기에도포함됩니다. 응용프로그램실행 2-17 페이지의예제 2-1 의응용프로그램코드는 10 진수값 10 및 3 을레지스터 r0 및 r1 로로드하는 start 레이블에서실행을시작합니다. 이러한레지스터를더한결과는 r0 에배치됩니다. 응용프로그램종료 기본코드가실행된후에는디버거로제어권이반환되어응용프로그램이종료됩니다. 이작업은 ARM 세미호스팅 SVC( 기본적으로 0x123456임 ) 를다음매개변수와함께사용하여수행합니다. r0은 angel_swireason_reportexception(0x18) 과같습니다. r1은 ADP_Stopped_ApplicationExit(0x20026) 와같습니다. END 지시문 이지시문은이소스파일의처리를중지하도록어셈블러에지시합니다. 모든어셈블리언어소스모듈은별도의행에서 END 로끝나야합니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
35 ARM 어셈블리언어작성 하위루틴호출 하위루틴을호출하려면분기및링크명령어를사용해야합니다. 구문은다음과같습니다. BL destination 여기서 destination 은일반적으로하위루틴의첫번째명령어레이블입니다. destination 은프로그램기준식일수도있습니다. 자세한내용은 페이지의 B, BL, BX, BLX 및 BXJ 를참조하십시오. BL 명령어의경우 링크레지스터에반환주소를배치합니다. PC를하위루틴의주소로설정합니다. 하위루틴코드가실행되고나면 BX lr 명령어를사용하여복귀할수있습니다. 일반적으로레지스터 r0 ~ r3 은매개변수를하위루틴에전달하는데사용되고 r0 은결과를호출자에게다시전달하는데사용됩니다. 참고개별적으로어셈블되었거나컴파일된모듈간의호출은프로시저호출표준에서정의된제한과규칙을준수해야합니다. 자세한내용은 install_directory\documentation\specifications\... 에있는 Procedure Call Standard for the ARM Architecture 사양 (aapcs.pdf) 을참조하십시오. 예제 2-2 에서는두매개변수값을더하고결과를 r0 에반환하는하위루틴을보여줍니다. 이예제는주예제디렉토리인 install_directory\rvds\examples 에 subrout.s 로제공되어있습니다. 이예제를어셈블, 링크및실행하는방법에대한자세한내용은 2-2 페이지의코드예제를참조하십시오. 예제 2-2 AREA subrout, CODE, READONLY ; Name this block of code ENTRY ; Mark first instruction to execute start MOV r0, #10 ; Set up parameters MOV r1, #3 BL doadd ; Call subroutine stop MOV r0, #0x18 ; angel_swireason_reportexception LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SVC #0x ; ARM semihosting (formerly SWI) ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-19
36 ARM 어셈블리언어작성 doadd ADD r0, r0, r1 ; Subroutine code BX lr ; Return from subroutine END ; Mark end of file 2-20 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
37 ARM 어셈블리언어작성 2.4 조건부실행 ARM 상태및 Thumb-2 가포함된프로세서의 Thumb 상태에서는대부분의데이터처리명령어에연산결과에따라 APSR( 응용프로그램상태레지스터 ) 의 ALU 상태플래그를업데이트하는옵션이있습니다. 일부명령어는모든플래그를업데이트하고일부명령어는하위세트만업데이트합니다. 플래그가업데이트되지않으면원래값이저장됩니다. 각명령어의설명부분에는해당명령어가플래그에주는영향이자세히나와있습니다. 실행되지않는조건부명령어는플래그에영향을주지않습니다. 이전아키텍처의 Thumb 상태에서는대부분의데이터처리명령어가 ALU 상태플래그를자동으로업데이트합니다. 플래그를업데이트하지않는옵션은없습니다. 이외의명령어는플래그를업데이트할수없습니다. ARM 상태및 Thumb-2가포함된프로세서의 Thumb 상태에서는다음과같이다른명령어에설정된 ALU 상태플래그에따라조건부로명령어를실행할수있습니다. 플래그를업데이트한명령어바로다음에실행합니다. 플래그를업데이트하지않은임의개수의간섭명령어다음에실행합니다. 거의모든 ARM 명령어는 APSR 의 ALU 상태플래그의상태에대해조건부로실행될수있습니다. 명령어를조건부명령어로만들기위해명령어에추가하는접미사목록은 2-23 페이지의표 2-2 를참조하십시오. Thumb 상태에서는조건부분기를통해조건부실행을위한메커니즘이제공됩니다. Thumb-2 가포함된프로세서의 Thumb 상태에서는특수 IT(If-Then) 명령어를사용하여명령어를조건부명령어로만들수있습니다. 또한 CBZ(0 인경우조건부분기 ) 및 CBNZ 명령어를사용하여레지스터의값을 0 과비교할수도있습니다. 이단원에서는다음내용을설명합니다. 2-22페이지의 ALU 상태플래그 2-22 페이지의조건부실행 2-24 페이지의조건부실행사용 2-25 페이지의조건부실행사용예제 2-29 페이지의 Q 플래그 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-21
38 ARM 어셈블리언어작성 ALU 상태플래그 APSR에는다음 ALU 상태플래그가포함되어있습니다. N 연산결과가음수인경우설정합니다. Z 연산결과가 0인경우설정합니다. C 연산결과가 carry인경우설정합니다. V 연산결과가오버플로인경우설정합니다. carry 는더하기결과가 2 32 보다크거나같은경우또는빼기결과가양수인경우에발생하거나이동또는논리명령어에서인라인배럴시프터연산의결과로발생합니다. 오버플로는더하기, 빼기또는비교의결과가 2 31 보다크거나같거나 보다작은경우발생합니다 조건부실행 조건부로실행될수있는명령어에는구문설명에 {cond} 로표시되는선택적조건코드가있습니다. 이조건은 ARM 명령어에인코딩되며, Thumb-2 명령어의경우위의 IT 명령어에인코딩됩니다. 조건코드가포함된명령어는 APSR 의조건코드플래그가지정된조건을충족하는경우에만실행됩니다 페이지의표 2-2 에서는사용할수있는조건코드를보여줍니다. Thumb-2 가없는 Thumb 프로세서에서 {cond} 필드는특정분기명령어에만허용됩니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
39 ARM 어셈블리언어작성 표 2-2에서는조건코드접미사와N, Z, C 및 V 플래그간의관계도보여줍니다. 표 2-2 조건코드접미사 접미사 플래그 의미 EQ Z 세트 같음 NE Z 지우기 같지않음 CS/HS C 세트 높거나같음 ( 부호없는 >= ) CC/LO C 지우기 보다낮음 ( 부호없는 < ) MI N 세트 음수 PL N 지우기 양수또는 0 VS V 세트 오버플로 VC V 지우기 오버플로없음 HI C 설정및 Z 지우기 보다높음 ( 부호없는 > ) LS C 지우기또는 Z 설정 낮거나같음 ( 부호없는 <= ) GE N 및 V 같음 부호있는 >= LT N 및 V 다름 부호있는 < GT Z 지우기, N 및 V 같음 부호있는 > LE Z 설정, N 및 V 다름 부호있는 <= AL Any 항상. 이접미사는대개생략됩니다. 예제 2-3 에서는조건부실행예제를보여줍니다. 예제 2-3 ADD r0, r1, r2 ; r0 = r1 + r2, don't update flags ADDS r0, r1, r2 ; r0 = r1 + r2, and update flags ADDSCS r0, r1, r2 ; If C flag set then r0 = r1 + r2, and update flags CMP r0, r1 ; update flags based on r0-r1. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-23
40 ARM 어셈블리언어작성 조건부실행사용 ARM 명령어의조건부실행을사용하여코드에서분기명령어수를줄일수있습니다. 이렇게하면코드밀도가향상됩니다. Thumb-2 의 IT 명령어도이와비슷하게향상되었습니다. 분기명령어는프로세서주기를많이사용합니다. 분기예상하드웨어가없는 ARM 프로세서에서분기명령어는분기가생성될때마다프로세서파이프라인을다시채우기위해세개의프로세서주기를사용합니다. 일부 ARM 프로세서 ( 예 : ARM10 및 StrongARM ) 에는분기예상하드웨어가있습니다. 이러한프로세서를사용하는시스템에서는잘못된분기예상이있을경우파이프라인을플러시하고다시채워야합니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
41 ARM 어셈블리언어작성 조건부실행사용예제 이예제에서는최대공약수 (gcd) 알고리즘 (Euclid) 의두가지구현을사용합니다. 이예제에서는조건부실행을사용하여코드밀도와실행속도를향상시키는방법을보여줍니다. 실행속도에대한자세한분석은 ARM7 프로세서에만적용되고코드밀도계산은모든 ARM 프로세서에적용됩니다. C 에서는이알고리즘을다음과같이표시할수있습니다. int gcd(int a, int b) { while (a!= b) { if (a > b) a = a - b; else b = b - a; } return a; } 조건부분기실행만포함된 gcd 함수는다음과같은방법으로구현할수있습니다. gcd CMP r0, r1 BEQ end BLT less SUBS r0, r0, r1 ; could be SUB r0, r0, r1 for ARM B gcd less SUBS r1, r1, r0 ; could be SUB r1, r1, r0 for ARM B gcd end 분기수때문에코드길이는명령어일곱개입니다. 분기가생성될때마다프로세서는파이프라인을다시채우고새위치에서계속실행되어야합니다. 다른명령어와실행되지않은분기는각각단일주기를사용합니다. ARM 명령어세트의조건부실행기능을사용하면다음과같이네개의명령어만으로 gcd 함수를구현할수있습니다. gcd CMP SUBGT SUBLE BNE r0, r1 r0, r0, r1 r1, r1, r0 gcd ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-25
42 ARM 어셈블리언어작성 코드크기를향상시킬뿐아니라대부분의경우이코드가빠르게실행됩니다. 표 2-3 및표 2-4 에서는 r0 이 1 이고 r1 이 2 인경우각구현에서사용하는주기수를보여줍니다. 이경우분기를모든명령어의조건부실행으로바꾸면 3 주기가절약됩니다. 코드의조건부버전은 r0 이 r1 과같은경우동일한주기수로실행됩니다. 다른모든경우코드의조건부버전은더적은주기수로실행됩니다. 표 2-3 주기수 ( 조건부분기에만해당 ) r0: a r1: b 명령어주기 (ARM7) 1 2 CMP r0, r BEQ end 1( 실행되지않음 ) 1 2 BLT less SUB r1, r1, r B gcd CMP r0, r BEQ end 3 총 13 개 표 2-4 주기수 ( 모든조건부명령어에해당 ) r0: a r1: b 명령어 주기 (ARM7) 1 2 CMP r0, r SUBGT r0,r0,r1 1( 실행되지않음 ) 1 1 SUBLT r1,r1,r BNE gcd CMP r0,r SUBGT r0,r0,r1 1( 실행되지않음 ) 2-26 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
43 ARM 어셈블리언어작성 표 2-4 주기수 ( 모든조건부명령어에해당 ) ( 계속 ) r0: a r1: b 명령어 주기 (ARM7) 1 1 SUBLT r1,r1,r0 1( 실행되지않음 ) 1 1 BNE gcd 1( 실행되지않음 ) 총 10개 gcd 의 16 비트 Thumb 버전 B 는조건부로실행될수있은유일한 16 비트 Thumb 명령어이므로 gcd 알고리즘은 Thumb 코드의조건부분기로작성되어야합니다. ARM 조건부분기구현과같이 Thumb 코드에는일곱개의명령어가필요합니다. Thumb 명령어를사용할경우전체코드크기는 16 바이트의 ARM 구현에비해작은 14 바이트입니다. 또한 16 비트메모리를사용하는시스템에서각 16 비트명령어에는하나의메모리액세스만필요하지만각 ARM 32 비트명령어에는두개의페치가필요하므로 Thumb 버전이 ARM 구현보다빠르게실행됩니다. gcd 의 Thumb-2 버전 다음과같이 IT 명령어를사용하여 SUB 명령어를조건부명령어로만들어이코드의 ARM 버전을 Thumb-2 코드로변환할수있습니다. gcd CMP ITE SUBGT SUBLE BNE r0, r1 GT r0, r0, r1 r1, r1, r0 gcd 이명령어는 ARM 또는 Thumb-2 코드로똑같이잘어셈블됩니다. 어셈블러에서는 IT 명령어를확인하지만 ARM 코드로어셈블할때는 IT 명령어를생략합니다. IT 명령어를생략할수있습니다. 어셈블러에서 Thumb-2 코드로어셈블할때자동으로 IT 명령어삽입합니다. 명령어가하나더필요한코드는 ARM 코드가아니라 Thumb-2 코드이지만전체코드크기가 Thumb-2 코드는 10 바이트지만 ARM 코드는 16 바이트입니다. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-27
44 ARM 어셈블리언어작성 실행속도 실행속도를최적화하려면명령어타이밍, 분기예상논리및타겟시스템의캐시동작을자세히알고있어야합니다. 개별프로세서에대한자세한내용은 ARM 아키텍처참조문서및기술참조설명서를참조하십시오 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
45 ARM 어셈블리언어작성 Q 플래그 ARMv5TE 및 ARMv6 이상에는포화산술명령어에서포화가발생할경우 (4-97 페이지의 QADD, QSUB, QDADD 및 QDSUB 참조 ) 또는특정곱하기명령어에서오버플로가발생할경우 (4-80 페이지의 SMULxy 및 SMLAxy 및 4-82 페이지의 SMULWy 및 SMLAWy 참조 ) 기록할 Q 플래그가있습니다. Q 플래그는스티키플래그입니다. 이러한명령어는플래그를설정할수만있고지울수는없습니다. 각명령어다음에나오는플래그를확인하지않고도이러한일련의명령어를실행한다음플래그를테스트하여특정지점에서포화나오버플로가발생했는지여부를확인할수있습니다. Q 플래그를지우려면 MSR 명령어 (4-137 페이지의 MSR 참조 ) 를사용하십시오. Q 플래그상태는조건코드에서직접테스트할수없습니다. Q 플래그의상태를보려면 MRS 명령어 (4-135 페이지의 MRS 참조 ) 를사용하십시오. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-29
46 ARM 어셈블리언어작성 2.5 레지스터에상수로드 메모리에서데이터를로드하지않으면단일 ARM 명령어로임의의 32 비트즉치상수를레지스터에로드할수없습니다. 이것은 ARM 및 Thumb-2 명령어의길이가 32 비트이기때문입니다. 16 비트 Thumb 명령어를사용하여생성할수있는상수의범위는훨씬더좁습니다. 또한별도의로드연산없이공통적으로사용되는많은상수를데이터처리명령어내에피연산자로직접포함할수있습니다. 데이터로드를통해 32 비트값을레지스터로로드할수있지만보다직접적이고효율적인방법으로공통적으로사용되는많은상수를로드할수있습니다. ARMv6T2 이상에서는두개의명령어 MOV 와 MOVT 를차례로사용하여 32 비트값을레지스터에로드할수있습니다. MOV32 의사명령어를사용하여명령어시퀀스를생성할수있습니다. 다음단원에서는다음내용에대해설명합니다. MOV 및 MVN 명령어를사용하여즉치값범위를로드하는방법자세한내용은 2-31페이지의 MOV 및 MVN을통한직접로드를참조하십시오. MOV32 의사명령어를사용하여 32비트상수를로드하는방법자세한내용은 2-35페이지의 MOV32를사용하여로드를참조하십시오. LDR 의사명령어를사용하여 32비트상수를로드하는방법자세한내용은 2-35페이지의 LDR Rd, =const를통한직접로드를참조하십시오. 부동소수점상수를로드하는방법 2-38페이지의부동소수점상수로드를참조하십시오 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
47 ARM 어셈블리언어작성 MOV 및 MVN 을통한직접로드 ARM 및 Thumb-2 에서는 32 비트 MOV 및 MVN 명령어를사용하여광범위한상수값을레지스터에직접로드할수있습니다. 16 비트 Thumb MOV 명령어는 0 ~ 255 범위의상수를로드할수있습니다. 16 비트 MVN 명령어를사용하여상수를로드할수는없습니다. ARM 상태즉치상수에서는단일 ARM 명령어로로드할수있는값범위를보여주고 2-33 페이지의 Thumb-2 즉치상수에서는단일 Thumb-2 명령어로로드할수있는값범위를보여줍니다. MOV 또는 MVN 중어느것을사용할지를지정하지않아도어셈블러에서자동으로적절한명령어를사용합니다. 이기능은값이어셈블리타임변수인경우에유용합니다. 사용할수없는상수가포함된명령어를작성하면어셈블러에서오류를보고합니다. 이연산에대해즉치값 n 이 ( 가 ) 범위를벗어났습니다. ARM 상태즉치상수 ARM 상태의경우 MOV로 0x0-0xFF(0 ~ 255) 범위의 8비트상수값을로드할수있습니다. 또한이러한값을짝수로회전할수있습니다. 또한이러한값은별도의명령어로로드하지않고대부분의데이터처리연산에서즉치피연산자로사용할수있습니다. MVN 으로이러한값의비트단위보수를로드할수있습니다. 숫자값은 - (n+1) 입니다. 여기서 n 은 MOV 에서사용할수있는값입니다. ARMv6T2 이상에서는 MOV 로 0x0-0xFFFF(0 ~ 65535) 범위의 16 비트숫자를로드할수있습니다 페이지의표 2-5 에서는이명령어가제공하는 8 비트값범위를보여줍니다 ( 데이터처리연산의경우 ) 페이지의표 2-6 에서는이명령어가제공하는 16 비트값범위를보여줍니다 (MOV 명령어의경우에만 ). ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-31
48 ARM 어셈블리언어작성 표 2-5 ARM 상태즉치상수 (8 비트 ) 이진 10 진수단계 16 진수 MVN 값 a 참고정보 abcdefgh xFF -1 ~ abcdefgh x3FC -4 ~ abcdefgh xFF0-16 ~ abcdefgh x3FC0-64 ~ abcdefgh x xFF x cdefgh ab ( 비트패턴 ) - - ( 비트패턴 ) 참고정보의 b 참조 efgh abcd ( 비트패턴 ) - - ( 비트패턴 ) 참고정보의 b 참조 gh abcdef ( 비트패턴 ) - - ( 비트패턴 ) 참고정보의 b 참조 표 2-6 MOV 명령어의 ARM 상태즉치상수 이진 10 진수단계 16 진수 MVN 값참고정보 abcdefghijklmnop xFFFF - 참고정보의 c 참조 참고정보 이러한참고는표 2-5 및표 2-6 에대한추가정보를제공합니다. a b c MVN 값은데이터처리명령어가아닌다른명령어에서피연산자로직접사용할수없습니다. 이러한값은 ARM 상태에서만사용할수있습니다. 이표에나와있는다른모든값은다른언급이없는한 Thumb-2 에서도사용할수있습니다. 이러한값은 ARMv6T2 이상에서만사용할수있고다른명령어에서피연산자로직접사용할수없습니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
49 ARM 어셈블리언어작성 Thumb-2 즉치상수 Thumb 상태에있는 ARMv6T2 이상의경우 32비트 MOV 명령어가다음을로드할수있습니다. 0x0 ~ 0xFF(0 ~ 255) 범위의 8비트상수값 임의의숫자를기준으로왼쪽으로시프트된 8비트상수값 레지스터의 4바이트모두에복제된 8비트패턴 바이트 1과바이트 3이 0으로설정된상태에서바이트 0과바이트 2에복제된 8비트패턴 바이트 0과바이트 2가 0으로설정된상태에서바이트 1과바이트 3에복제된 8비트패턴또한이러한값은별도의명령어로로드하지않고대부분의데이터처리연산에서즉치피연산자로사용할수있습니다. 32 비트 MVN 명령어는이러한값의비트단위보수를로드할수있습니다. 숫자값은 -(n+1) 입니다. 여기서 n 은 MOV 에서사용할수있는값입니다. 32 비트 MOV 명령어는 0x0 ~ 0xFFFF(0 ~ 65535) 범위의 16 비트숫자를로드할수있습니다. 이러한값은데이터처리연산에서즉치피연산자로사용할수없습니다 페이지의표 2-7 에서는이명령어가제공하는값범위를보여줍니다 ( 데이터처리연산의경우 ) 페이지의표 2-8 에서는이명령어가제공하는 16 비트값범위를보여줍니다 (MOV 명령어의경우에만 ). ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-33
50 ARM 어셈블리언어작성 표 2-7 Thumb 상태즉치상수 이진 10 진수단계 16 진수 MVN 값 a 참고정보 abcdefgh xFF -1 ~ abcdefgh x1FE -2 ~ abcdefgh x3FC -4 ~ abcdefgh x x7F x abcdefgh x xFF x abcdefghabcdefghabcdefghabcdefgh ( 비트패턴 ) - 0xXYXYXYXY 0xXYXYXYXY abcdefgh abcdefgh ( 비트패턴 ) - 0x00XY00XY 0xFFXYFFXY - abcdefgh abcdefgh ( 비트패턴 ) - 0xXY00XY00 0xXYFFXYFF abcdefghijkl xFFF - 참고정보의 b 참조 표 2-8 MOV 명령어의 Thumb 상태즉치상수 이진 10 진수단계 16 진수 MVN 값참고정보 abcdefghijklmnop xFFFF - 참고정보의 c 참조 참고정보 이러한참고는표 2-7 및표 2-8 에대한추가정보를제공합니다. a MVN 값은다른명령어에서피연산자로직접사용할수없습니다. b 이러한값은 ADD, SUB 및 MOV 명령어에서피연산자로직접사용할수있지만 MVN 또는다른데이터처리명령어에서는사용할수없습니다. c 이러한값은 MOV 명령어에서만사용할수있습니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
51 ARM 어셈블리언어작성 MOV32 를사용하여로드 ARMv6T2 의 ARM 및 Thumb-2 명령어세트에는다음이포함됩니다. 0x ~ 0x0000FFFF 범위의값을레지스터로로드할수있는 MOV 명령어 최하위반의내용을변경하지않고 0x0000 ~ 0xFFFF 범위의값을레지스터의최상위반으로로드할수있는 MOVT 명령어 이러한두개명령어를사용하여레지스터에서 32 비트상수를생성할수있습니다. 이외에도 MOV32 의사명령어를사용할수있습니다. 어셈블러는 MOV, MOVT 명령어쌍을생성합니다. MOV32 의사명령어의구문에대한자세한내용은 페이지의 MOV32 의사명령어를참조하십시오 LDR Rd, =const 를통한직접로드 LDR Rd,=const 의사명령어는단일명령어에서 32 비트숫자상수를생성할수있습니다. 이의사명령어를사용하여 MOV 및 MVN 명령어범위를벗어난상수를생성할수있습니다. LDR 의사명령어는특정상수에대한가장효율적인단일명령어를생성합니다. MOV 또는 MVN 명령어를사용하여상수를생성할수있으면어셈블러가해당명령어를생성합니다. MOV 또는 MVN 명령어를사용하여상수를생성할수없으면어셈블러가다음을수행합니다. 리터럴풀 ( 상수값을포함하기위한코드에임베드된메모리일부 ) 에값배치 리터럴풀에서값을읽는프로그램기준주소가포함된 LDR 명령어생성 예를들면다음과같습니다. LDR rn, [pc, #offset to literal pool] ; load register n with one word ; from the address [pc + offset] 어셈블러에서생성된 LDR 명령어의범위내에리터럴풀이있는지확인해야합니다. 자세한내용은 2-36 페이지의리터럴풀배치을참조하십시오. 의사명령어의구문에대한자세한내용은 페이지의 LDR 의사명령어를참조하십시오. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-35
52 ARM 어셈블리언어작성 리터럴풀배치 어셈블러는각섹션의끝에리터럴풀을배치합니다. 이러한리터럴풀은다음섹션시작에있는 AREA 지시문또는어셈블리끝에있는 END 지시문을통해정의됩니다. 포함파일끝에있는 END 지시문은섹션의끝을나타내지않습니다. 넓은섹션에서는기본리터럴풀이하나이상의 LDR 명령어범위를벗어날수있습니다. PC에서상수까지의오프셋은다음과같아야합니다. ARM 또는 Thumb-2 코드에서는 4KB 미만이지만두방향중한방향이될수있음 16비트명령어를사용할경우 Thumb에서 1KB 미만및정방향 LDR Rd,=const 의사명령어가상수를리터럴풀에배치해야할경우어셈블러에서는다음을수행합니다. 이전리터럴풀에서상수를사용할수있고주소지정이가능한지확인합니다. 이경우기존상수에주소를지정합니다. 아직사용하도록설정되지않은경우다음리터럴풀에상수를배치하려고합니다. 다음리터럴풀이범위를벗어날경우어셈블러는오류메시지를생성합니다. 이경우 LTORG 지시문을사용하여코드에추가리터럴풀을배치해야합니다. 실패한 LDR 의사명령어뒤에 ±4KB(ARM, 32 비트 Thumb-2) 내또는 0 ~ +1KB 범위 (Thumb, 16 비트 Thumb-2) 에 LTORG 지시문을배치합니다. 자세한내용은 7-19 페이지의 LTORG 를참조하십시오. 프로세서가지시문을명령어로실행하려고하지않으면리터럴풀을배치해야합니다. 조건부가아닌분기명령어또는하위루틴끝의반환명령어다음에지시문을배치합니다. 예제 2-4 에서는이작업을수행하는방법을보여줍니다. 이예제는주예제디렉토리인 install_directory\rvds\examples 에 loadcon.s 로제공되어있습니다. 이예제를어셈블, 링크및실행하는방법에대한자세한내용은 2-2 페이지의코드예제를참조하십시오. 주석으로표시된명령어는어셈블러에서생성된 ARM 명령어입니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
53 ARM 어셈블리언어작성 예제 2-4 start stop AREA ENTRY Loadcon, CODE, READONLY ; Mark first instruction to execute BL func1 ; Branch to first subroutine BL func2 ; Branch to second subroutine MOV r0, #0x18 ; angel_swireason_reportexception LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SVC #0x ; ARM semihosting (formerly SWI) func1 LDR r0, =42 ; => MOV R0, #42 LDR r1, =0x ; => LDR R1, [PC, #offset to ; Literal Pool 1] LDR r2, =0xFFFFFFFF ; => MVN R2, #0 BX lr LTORG ; Literal Pool 1 contains ; literal Ox func2 LDR r3, =0x ; => LDR R3, [PC, #offset to ; Literal Pool 1] ; LDR r4, =0x ; If this is uncommented it ; fails, because Literal Pool 2 ; is out of reach BX lr LargeTable SPACE 4200 ; Starting at the current location, ; clears a 4200 byte area of memory ; to zero END ; Literal Pool 2 is empty 부동소수점상수로드 NEON 및 VFPv3 명령어세트에는제한된범위의부동소수점상수를즉치상수로로드하는명령어가있습니다. 다음을참조하십시오. NEON 명령어에대한자세한내용은 5-37 페이지의 VMOV, VMVN( 즉치값 ) 을참조하십시오. VFPv3 명령어에대한자세한내용은 5-97 페이지의 VMOV 를참조하십시오. VLDR 의사명령어를사용하여단일명령어에서단정밀도또는배정밀도부동소수점값을로드할수있습니다. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-37
54 ARM 어셈블리언어작성 자세한내용은 5-77 페이지의 VLDR 의사명령어를참조하십시오 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
55 ARM 어셈블리언어작성 2.6 레지스터에주소로드 주소를레지스터로로드해야할수있습니다. 변수주소, 문자열상수, 점프테이블의시작위치를로드해야할수있습니다. 일반적으로주소는현재 PC 또는기타레지스터의오프셋으로표시됩니다. 이단원에서는주소를레지스터로로드하는다음과같은방법에대해설명합니다. 레지스터직접로드 (ADR 및 ADRL을통한직접로드참조 ) 리터럴풀에서주소로드 (2-42페이지의 with LDR Rd, =label을통한주소로드참조 ) ADR 및 ADRL 을통한직접로드 ADR 명령어및 ADRL 의사명령어를사용하여데이터로드를수행하지않고특정범위내에주소를생성할수있습니다. ADR 및 ADRL 은프로그램기준식즉, 레이블주소가현재 PC 에상대적인선택적오프셋이있는레이블을허용합니다. 참고 ADR 또는 ADRL 에사용된레이블은동일한코드섹션내에있어야합니다. 어셈블러에서는동일한섹션의범위를벗어난레이블에대한참조에대해오류를발생시킵니다. Thumb 상태에서 16 비트 ADR 명령어는워드로정렬된주소만생성할수있습니다. ADRL 은 Thumb-2 가없는프로세서의 Thumb 상태에서사용할수없습니다. ADR 사용가능한범위는다음과같은명령어세트에따라달라집니다. ARM 바이트또는하프워드로정렬된주소의경우, ±255 바이트 워드로정렬된주소의경우, ±1020 바이트 32 비트 Thumb-2 바이트, 하프워드또는워드로정렬된주소의경우, ±4095 바이트 16 비트 Thumb 0 ~ 1020 바이트. label 은워드로정렬되어야합니다. 이렇게하려면 ALIGN 지시문을사용하면됩니다. 자세한내용은 4-25 페이지의 ADR 을참조하십시오. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-39
56 ARM 어셈블리언어작성 ADRL 어셈블러는다음을생성하여 ADRL rn,label 의사명령어를변환합니다. 범위내에있는경우주소를로드하는두개의데이터처리명령어 두개의명령어로주소를생성할수없는경우오류메시지사용가능한범위는다음과같이사용중인명령어세트에따라달라집니다. ARM 바이트또는하프워드로정렬된주소의경우, ±64KB 워드로정렬된주소의경우 ±256KB 32 비트 Thumb-2 바이트, 하프워드또는워드로정렬된주소의경우 ±1MB 16 비트 Thumb ADRL 을사용할수없음 ADRL 의사명령어범위를벗어난주소를로드하는방법에대한자세한내용은 2-42 페이지의 with LDR Rd, =label 을통한주소로드를참조하십시오. ADR 을통한점프테이블구현 예제 2-5 에서는점프테이블을구현하는 ARM 코드를보여줍니다. 이예제에서 ADR 의사명령어는점프테이블의주소를로드합니다. 이예제는주예제디렉토리인 install_directory\rvds\examples 에 jump.s 로제공되어있습니다. 이예제를어셈블, 링크및실행하는방법에대한자세한내용은 2-2 페이지의코드예제를참조하십시오. 예제 2-5 점프테이블구현 (ARM) AREA Jump, CODE, READONLY ; Name this block of code ARM ; Following code is ARM code num EQU 2 ; Number of entries in jump table ENTRY ; Mark first instruction to execute start ; First instruction to call MOV r0, #0 ; Set up the three parameters MOV r1, #3 MOV r2, #2 BL arithfunc ; Call the function stop MOV r0, #0x18 ; angel_swireason_reportexception LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SVC #0x ; ARM semihosting (formerly SWI) arithfunc ; Label the function CMP r0, #num ; Treat function code as unsigned integer 2-40 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
57 ARM 어셈블리언어작성 BXHS lr ; If code is >= num then simply return ADR r3, JumpTable ; Load address of jump table LDR pc, [r3,r0,lsl#2] ; Jump to the appropriate routine JumpTable DCD DoAdd DCD DoSub DoAdd DoSub ADD r0, r1, r2 ; Operation 0 BX lr ; Return SUB r0, r1, r2 ; Operation 1 BX lr ; Return END ; Mark the end of this file 2-40 페이지의예제 2-5 에서함수 arithfunc 는세개의인수를사용하고결과를 r0 에반환합니다. 첫번째인수는두번째및세번째인수에서수행되는연산을결정합니다. argument1=0 argument1=1 Result = argument2 + argument3. Result = argument2 - argument3. 점프테이블은다음명령어와어셈블러지시문을사용하여구현합니다. EQU 어셈블러지시문입니다. 심볼에값을제공하는데사용됩니다 페이지의예제 2-5 에서이지시문은값 2 를 num 에할당합니다. num 이코드에사용되면값 2 를대체합니다. 이방법으로 EQU 를사용하는것은 #define 을사용하여 C 에서상수를정의하는것과비슷합니다. DCD LDR 저장소에하나이상의워드를선언합니다 페이지의예제 2-5 에서각 DCD 는점프테이블의특정절을처리하는루틴의주소를저장합니다. LDR pc,[r3,r0,lsl#2] 명령어는점프테이블의필수절주소를 PC로로드합니다. 이명령어는다음을수행합니다. r0의절번호에 4를곱해워드오프셋을제공합니다. 결과에점프테이블주소를더합니다. 결합된주소내용을 PC로로드합니다. ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-41
58 ARM 어셈블리언어작성 with LDR Rd, =label 을통한주소로드 LDR Rd,= 의사명령어는 32 비트상수를레지스터에로드할수있습니다 (2-35 페이지의 LDR Rd, =const 를통한직접로드참조 ). 또한레이블및오프셋포함레이블과같은프로그램기준식을허용합니다. 어셈블러에서는다음을수행하여 LDR r0, =label 의사명령어를변환합니다. 리터럴풀 ( 상수값을포함하기위한코드에임베드된메모리일부 ) 에 label 주소를배치합니다. 리터럴풀에서주소를읽는프로그램기준주소가포함된 LDR 명령어를생성합니다. 예를들면다음과같습니다. LDR rn [pc, #offset to literal pool] ; load register n with one word ; from the address [pc + offset] 범위내에리터럴풀이있는지확인해야합니다. 자세한내용은 2-36 페이지의리터럴풀배치를참조하십시오. ADR 및 ADRL 의사명령어와달리 LDR 은현재섹션외부의레이블에사용할수있습니다. 레이블이현재섹션의외부에있으면어셈블러는소스파일을어셈블할때재배치지시문을개체코드에배치합니다. 재배치지시문은링크타임에링커가주소를확인하도록지정합니다. 링커가 LDR 과리터럴풀이포함된섹션을배치하는위치에관계없이주소는유효한상태로유지됩니다. 예제 2-6 에서는이작업을수행하는방법을보여줍니다. 이예제는주예제디렉토리인 install_directory\rvds\examples 에 ldrlabel.s 로제공되어있습니다. 이예제를어셈블, 링크및실행하는방법에대한자세한내용은 2-2 페이지의코드예제를참조하십시오. 주석에나열된명령어는어셈블러에서생성된 ARM 명령어입니다. 예제 2-6 start stop AREA ENTRY LDRlabel, CODE,READONLY ; Mark first instruction to execute BL func1 ; Branch to first subroutine BL func2 ; Branch to second subroutine MOV r0, #0x18 ; angel_swireason_reportexception LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SVC #0x ; ARM semihosting (formerly SWI) 2-42 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
59 ARM 어셈블리언어작성 func1 LDR r0, =start ; => LDR R0,[PC, #offset into ; Literal Pool 1] LDR r1, =Darea + 12 ; => LDR R1,[PC, #offset into ; Literal Pool 1] LDR r2, =Darea ; => LDR R2, [PC, #offset into ; Literal Pool 1] BX lr ; Return LTORG ; Literal Pool 1 func2 LDR r3, =Darea ; => LDR r3, [PC, #offset into ; Literal Pool 1] ; (sharing with previous literal) ; LDR r4, =Darea ; If uncommented produces an error ; as Literal Pool 2 is out of range BX lr ; Return Darea SPACE 8000 ; Starting at the current location, ; clears a 8000 byte area of memory ; to zero END ; Literal Pool 2 is out of range of ; the LDR instructions above ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-43
60 ARM 어셈블리언어작성 LDR Rd, =label 예제 : 문자열복사 예제 2-7 에서는한문자열에다른문자열을덮어쓰는 ARM 코드루틴을보여줍니다. 이예제에서는 LDR 의사명령어를사용하여두문자열의주소를데이터섹션에서로드합니다. 다음은특히중요한예제입니다. DCB LDR, STR DCB 지시문은저장소에하나이상의바이트를정의합니다. 정수값과함께 DCB 는따옴표로묶인문자열을허용합니다. 문자열의각문자는연속된바이트로배치됩니다. 자세한내용은 7-23 페이지의 DCB 를참조하십시오. LDR 및 STR 명령어는 Post 인덱싱된주소지정을사용하여주소레지스터를업데이트합니다. 다음명령어를예로들수있습니다. LDRB r2,[r1],#1 r1 에의해지정된주소내용을사용하여 r2 를로드한다음 r1 을 1 씩증가시킵니다. 예제 2-7 문자열복사 AREA StrCopy, CODE, READONLY ENTRY ; Mark first instruction to execute start LDR r1, =srcstr ; Pointer to first string LDR r0, =dststr ; Pointer to second string BL strcopy ; Call subroutine to do copy stop MOV r0, #0x18 ; angel_swireason_reportexception LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SVC #0x ; ARM semihosting (formerly SWI) strcopy LDRB r2, [r1],#1 ; Load byte and update address STRB r2, [r0],#1 ; Store byte and update address CMP r2, #0 ; Check for zero terminator BNE strcopy ; Keep going if not MOV pc,lr ; Return AREA srcstr DCB dststr DCB END Strings, DATA, READWRITE "First string - source",0 "Second string - destination", Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
61 ARM 어셈블리언어작성 2.7 다중레지스터로드및저장명령어 ARM, Thumb 및 Thumb-2 명령어세트는메모리에서여러레지스터를로드하고메모리에저장하는명령어를포함합니다. 다중레지스터전송명령어는여러레지스터의내용을메모리와사이에서이동하는효율적인방법을제공합니다. 이명령어는블록복사및하위루틴진입및종료의스택연산에가장많이사용됩니다. 일련의단일데이터전송명령어대신다중레지스터전송명령어를사용하면다음과같은장점이있습니다. 더작은코드크기. 여러명령어페치가아니라단일명령어페치오버헤드. 변경되지않은 ARM 프로세서에서다중로드또는다중저장에의한데이터의첫워드는항상비순차메모리주기이지만전송되는모든후속워드는순차메모리주기가될수있습니다. 대부분의시스템에서는순차메모리주기가더빠릅니다. 참고 번호가가장낮은레지스터는액세스되는가장낮은메모리주소에서또는이주소로전송되고번호가가장높은레지스터는액세스되는가장높은메모리주소에서또는이주소로전송됩니다. 명령어의레지스터목록에나열된레지스터순서에따른차이는없습니다. - - diag_warning 1206 어셈블러명령행옵션을사용하여레지스터목록의레지스터가오름차순으로지정되어있는지확인할수있습니다. 이단원에서는다음내용을설명합니다. 2-46페이지의 ARM 및 Thumb-2에서사용할수있는다중로드및저장명령어 2-47페이지의 LDM 및 STM을통한스택구현 2-49 페이지의 LDM 및 STM 을통한블록복사 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-45
62 ARM 어셈블리언어작성 ARM 및 Thumb-2 에서사용할수있는다중로드및저장명령어 다음명령어는 ARM 명령어세트와 Thumb-2 명령어세트에서사용할수있습니다. LDM 다중레지스터를로드합니다. STM 다중레지스터를저장합니다. PUSH 다중레지스터를스택에저장하고스택포인터를업데이트합니다. POP LDM 및 STM 명령어의경우 다중레지스터를스택에서로드하고스택포인터를업데이트합니다. 로드또는저장된레지스터목록에다음이포함될수있습니다. ARM 명령어의경우, r0 ~ r15 모두 32비트 Thumb-2 명령어의경우, r0 ~ r12 모두및선택적으로일부제한이있는 r14 또는 r15 16비트 Thumb 및 Thumb-2 명령어의경우 r0 ~ r7 모두 주소는다음중하나일수있습니다. 각전송후에증가하는주소 각전송전에증가하는주소 (ARM 명령어에만해당 ) 각전송후에감소하는주소 (ARM 명령어에만해당 ) 각전송전에감소하는주소 (16비트 Thumb 제외 ) 기준레지스터는다음중하나일수있습니다. 메모리의다음데이터블록을가리키도록업데이트되는레지스터 명령어이전상태로남아있는레지스터 (16비트 Thumb 제외 ) 기준레지스터가메모리의다음블록을가리키도록업데이트될경우이작업을쓰기되돌림이라고합니다. 즉, 인접주소가기준레지스터에다시기록됩니다. PUSH 및 POP 명령어의경우 스택포인터 (r13) 가기준레지스터이고항상업데이트됩니다. 주소는 POP 명령어의각전송후에증가되고 PUSH 명령어의각전송전에감소됩니다. 로드또는저장된레지스터목록에는다음이포함될수있습니다. ARM 명령어의경우, r0 ~ r15 모두 2-46 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
63 ARM 어셈블리언어작성 32비트 Thumb-2 명령어의경우, r0 ~ r12 모두및선택적으로일부제한이있는 r14 또는 r15 16비트 Thumb-2 및 Thumb 명령어의경우, r0 ~ r7 모두및선택적으로 r14(push에만해당 ) 또는 r15(pop에만해당 ) LDM 및 STM 을통한스택구현 다중로드및저장명령어는기준레지스터를업데이트할수있습니다. 스택연산의경우기준레지스터는일반적으로스택포인트 r13 입니다. 즉, 이러한명령어를사용하여단일명령어에서임의의레지스터수에대해푸시및팝연산을구현할수있습니다. 다중로드및저장명령어는여러유형의스택에사용할수있습니다. 내림차순또는오름차순스택은상위주소에서시작하여하위주소로진행하여 ( 내림차순스택 ) 아래쪽으로증가하거나하위주소에서시작하여상위주소로진행하여 ( 오름차순스택 ) 위쪽으로증가합니다. 전체또는비어있음스택포인터는스택의마지막항목 ( 전체스택 ) 또는스택의다음빈공간 ( 빈스택 ) 을가리킬수있습니다. 프로그래머가이작업을간편하게수행하려면증가나감소대신접미사앞이나뒤에스택지향접미사를사용할수있습니다. 스택지향접미사목록은표 2-9 를참조하십시오. 표 2-9 다중로드및저장명령어의접미사 스택유형 푸시 팝 전체내림차순 STMFD(STMDB, 이전감소 ) LDMFD(LDM, 이후증가 ) 전체오름차순 STMFA(STMIB, 이전증가 ) LDMFA (LDMDA, 이후감소 ) 빈내림차순 STMED (STMDA, 이후감소 ) LDMED(LDMIB, 이전증가 ) 빈오름차순 STMEA(STM, 이후증가 ) LDMEA(LDMDB, 이전감소 ) 예를들면다음과같습니다. STMFD LDMFD r13!, {r0-r5} ; Push onto a Full Descending Stack r13!, {r0-r5} ; Pop from a Full Descending Stack ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-47
64 ARM 어셈블리언어작성 참고 Procedure Call Standard for the ARM Architecture(AAPCS) 와 ARM, Thumb C 및 C++ 컴파일러에서는항상전체내림차순스택을사용합니다. PUSH 및 POP 명령어는전체내림차순스택을가정합니다. 이러한명령어쓰기되돌림이포함된 STMDB 및 LDM 의동의어입니다. 중첩하위루틴에대해레지스터스택 스택연산은하위루틴진입과종료에유용합니다. 하위루틴진입시에필요한작업레지스터는스택에저장되고종료시에다시팝될수있습니다. 또한진입시링크레지스터를스택으로푸시하면복귀주소가손실되지않고추가하위루틴호출을안전하게수행할수있습니다. 이렇게하면종료시스택에서 pc 를팝하고해당값을 pc 로이동하여하위루틴에서복귀할수있습니다. 예를들면다음과같습니다. subroutine PUSH ; code BL ; code POP {r5-r7,lr} ; Push work registers and lr somewhere_else {r5-r7,pc} ; Pop work registers and pc 참고혼합 ARM 및 Thumb 시스템에서는이명령어를주의하여사용해야합니다. ARMv4T 시스템에서 pc 로직접팝하여상태를변경할수없습니다. 이경우주소를임시레지스터로팝하고 BX 명령어를사용해야합니다. ARMv5T 이상에서는이방법으로상태를변경할수있습니다. ARM 과 Thumb 을함께사용하는데대한자세한내용은 RealView Compilation Tools 개발자설명서에서 4 장 ARM 과 Thumb 의인터워킹을참조하십시오 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
65 ARM 어셈블리언어작성 LDM 및 STM 을통한블록복사 예제 2-8 은한번에하나의워드를복사하여소스위치에서대상으로워드세트를복사하는 ARM 코드루틴입니다. 이예제는주예제디렉토리인 install_directory\rvds\examples 에 word.s 로제공되어있습니다. 이예제를어셈블, 링크및실행하는방법에대한자세한내용은 2-2 페이지의코드예제를참조하십시오. 예제 2-8 LDM 및 STM 을사용하지않는블록복사 AREA Word, CODE, READONLY ; name this block of code num EQU 20 ; set number of words to be copied ENTRY ; mark the first instruction called start LDR r0, =src ; r0 = pointer to source block LDR r1, =dst ; r1 = pointer to destination block MOV r2, #num ; r2 = number of words to copy wordcopy LDR r3, [r0], #4 ; load a word from the source and STR r3, [r1], #4 ; store it to the destination SUBS r2, r2, #1 ; decrement the counter BNE wordcopy ;... copy more stop MOV r0, #0x18 ; angel_swireason_reportexception LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SVC #0x ; ARM semihosting (formerly SWI) AREA BlockData, DATA, READWRITE src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END 이모듈은가능한한많은복사본을만들기위해 LDM 및 STM 을사용하여보다효율적으로만들수있습니다. ARM 에있는레지스터의수를고려하면한번에여덟개의워드를전송하는것이좋습니다. 복사할블록에서 8 워드배수는다음을사용하여찾을수있습니다 (r2 = 복사할워드수 ). MOVS r3, r2, LSR #3 ; number of eight word multiples 이값은이터레이션당여덟개의워드를복사하는루프를통해이터레이션수를제어하는데사용할수있습니다. 여덟개미만의워드가남아있으면 r2 가손상되지않았다는가정하에다음을사용하여남은워드수를찾을수있습니다. ANDS r2, r2, #7 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-49
66 ARM 어셈블리언어작성 2-50 페이지의예제 2-9 에서는복사에 LDM 및 STM 을사용하도록재작성된블록복사모듈을나열합니다. 예제 2-9 LDM 및 STM 을사용한블록복사 AREA Block, CODE, READONLY ; name this block of code num EQU 20 ; set number of words to be copied ENTRY ; mark the first instruction called start LDR r0, =src ; r0 = pointer to source block LDR r1, =dst ; r1 = pointer to destination block MOV r2, #num ; r2 = number of words to copy MOV sp, #0x400 ; Set up stack pointer (r13) blockcopy MOVS r3,r2, LSR #3 ; Number of eight word multiples BEQ copywords ; Less than eight words to move? PUSH {r4-r11} ; Save some working registers octcopy LDM r0!, {r4-r11} ; Load 8 words from the source STM r1!, {r4-r11} ; and put them at the destination SUBS r3, r3, #1 ; Decrement the counter BNE octcopy ;... copy more POP {r4-r11} ; Don't need these now - restore ; originals copywords ANDS r2, r2, #7 ; Number of odd words to copy BEQ stop ; No words left to copy? wordcopy LDR r3, [r0], #4 ; Load a word from the source and STR r3, [r1], #4 ; store it to the destination SUBS r2, r2, #1 ; Decrement the counter BNE wordcopy ;... copy more stop MOV r0, #0x18 ; angel_swireason_reportexception LDR r1, =0x20026 ; ADP_Stopped_ApplicationExit SVC #0x ; ARM semihosting (formerly SWI) AREA BlockData, DATA, READWRITE src DCD 1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8,1,2,3,4 dst DCD 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 END 2-50 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
67 ARM 어셈블리언어작성 2.8 매크로사용 매크로정의는 MACRO 및 MEND 지시문으로묶인코드블록입니다. 매크로정의는전체코드블록을반복하는대신사용할수있는이름을정의합니다. 매크로는주로다음과같은목적으로사용됩니다. 코드블록을하나의의미있는이름으로바꿔서더간편하게소스코드의논리를따를수있도록합니다. 코드블록을여러번반복하지않도록합니다. 자세한내용은 7-33 페이지의 MACRO 및 MEND 를참조하십시오. 이단원에서는다음내용을설명합니다. 2-52페이지의테스트및분기매크로예제 2-52 페이지의부호없는정수나누기매크로예제 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-51
68 ARM 어셈블리언어작성 테스트및분기매크로예제 ARM 코드및 Thumb-2 가없는프로세서의 Thumb 에서테스트및분기연산에는두개의 ARM 명령어를구현해야합니다. 다음과같이매크로정의를정의할수있습니다. MACRO $label TestAndBranch $dest, $reg, $cc $label CMP $reg, #0 B$cc $dest MEND MACRO 지시문다음의행은매크로프로토타입문입니다. 이문은매크로호출에사용할이름 (TestAndBranch) 을정의합니다. 또한매개변수 ($label, $dest, $reg 및 $cc) 를정의합니다. 지정되지않은매개변수는빈문자열로대체됩니다. 이매크로의경우구문오류를방지하려면 $dest, $reg 및 $cc 에값을제공해야합니다. 어셈블러에서는제공된값을코드로대체합니다. 이매크로는다음과같이호출할수있습니다. test TestAndBranch NonZero, r0, NE NonZero 대체후에는다음과같이됩니다. test CMP r0, #0 BNE NonZero NonZero 부호없는정수나누기매크로예제 2-53 페이지의예제 2-10 에서는부호없는정수나누기를수행하는매크로를보여줍니다. 네개의매개변수를사용합니다. $Bot $Top $Div 제수가들어있는레지스터 명령어가실행되기전피제수가들어있는레지스터로, 명령어가실행된후에는나머지를포함합니다. 나누기의몫이배치되는레지스터로, 나머지만필요한경우에는 NULL("") 일수있습니다 Copyright ARM Limited. All rights reserved. ARM DUI 0204HK
69 ARM 어셈블리언어작성 $Temp 계산하는동안사용되는임시레지스터 예제 2-10 MACRO $Lab DivMod $Div,$Top,$Bot,$Temp ASSERT $Top <> $Bot ; Produce an error message if the ASSERT $Top <> $Temp ; registers supplied are ASSERT $Bot <> $Temp ; not all different IF "$Div" <> "" ASSERT $Div <> $Top ; These three only matter if $Div ASSERT $Div <> $Bot ; is not null ("") ASSERT $Div <> $Temp ; ENDIF $Lab MOV $Temp, $Bot ; Put divisor in $Temp CMP $Temp, $Top, LSR #1 ; double it until 90 MOVLS $Temp, $Temp, LSL #1 ; 2 * $Temp > $Top CMP $Temp, $Top, LSR #1 BLS %b90 ; The b means search backwards IF "$Div" <> "" ; Omit next instruction if $Div is null MOV $Div, #0 ; Initialize quotient ENDIF 91 CMP $Top, $Temp ; Can we subtract $Temp? SUBCS $Top, $Top,$Temp ; If we can, do so IF "$Div" <> "" ; Omit next instruction if $Div is null ADC $Div, $Div, $Div ; Double $Div ENDIF MOV $Temp, $Temp, LSR #1 ; Halve $Temp, CMP $Temp, $Bot ; and loop until BHS %b91 ; less than divisor MEND 매크로에서는두개의매개변수가동일한레지스터를사용하는지확인합니다. 또한나머지만필요한경우생성된코드를최적화합니다. 어셈블러소스에서둘이상의 DivMod 가사용되는경우여러개의레이블정의를방지하기위해매크로에서는지역레이블 (90, 91) 을사용합니다. 자세한내용은 2-14 페이지의지역레이블을참조하십시오 페이지의예제 2-11 에서는이매크로를다음과같이호출할경우생성되는코드를보여줍니다. ratio DivMod r0,r5,r4,r2 ARM DUI 0204HK Copyright ARM Limited. All rights reserved. 2-53
Microsoft Word - 1. ARM Assembly 실습_xp2.doc
ARM asm 의구조 ARM Assembly 실습 1. 기본골격 AREA armex,code, READONLY ;Mark first instruction to execute start MOV r0, #10 MOV r1,#3 ADD r0, r0, r1 ; r0 = r0 + r1 stop NOP NOP B stop ; Mark end of file 위의 asm의구조를이해하고실행해보세요.
More informationMicrosoft PowerPoint - chap02-C프로그램시작하기.pptx
#include int main(void) { int num; printf( Please enter an integer "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 을 작성하면서 C 프로그램의
More information아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상
Android 용 Brother Image Viewer 설명서 버전 0 KOR 아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상표입니다. Android는
More informationMicrosoft Word - FunctionCall
Function all Mechanism /* Simple Program */ #define get_int() IN KEYOARD #define put_int(val) LD A val \ OUT MONITOR int add_two(int a, int b) { int tmp; tmp = a+b; return tmp; } local auto variable stack
More informationMicrosoft PowerPoint - chap01-C언어개요.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 프로그래밍의 기본 개념을
More informationPoison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3
Poison null byte Excuse the ads! We need some help to keep our site up. List 1 Conditions 2 Exploit plan 2.1 chunksize(p)!= prev_size (next_chunk(p) 3 Example 3.1 Files 3.2 Source code 3.3 Exploit flow
More informationPowerPoint 프레젠테이션
System Software Experiment 1 Lecture 5 - Array Spring 2019 Hwansoo Han (hhan@skku.edu) Advanced Research on Compilers and Systems, ARCS LAB Sungkyunkwan University http://arcs.skku.edu/ 1 배열 (Array) 동일한타입의데이터가여러개저장되어있는저장장소
More informationMicrosoft PowerPoint - 05-ARM-Instruction-Set.ppt
ARM 명령어집합 임베디드시스템소프트웨어 I 내용 ARM 구조 프로세서수행모드 레지스터구조 예외처리과정 ARM 명령어형식 조건수행접미사 데이터처리명령어 곱셈명령어 Load/Store 명령어 다중레지스터 Load/Store 스택명령어 SWI 명령어 Branch 명령어 상태레지스터접근명령어 명령어요약 ARM 명령어집합 2 ARM 구조특징 모든명령어가 32bit
More informationMicrosoft PowerPoint - chap03-변수와데이터형.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num %d\n", num); return 0; } 1 학습목표 의 개념에 대해 알아본다.
More informationJVM 메모리구조
조명이정도면괜찮조! 주제 JVM 메모리구조 설미라자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조장. 최지성자료조사, 자료작성, PPT 작성, 보고서작성. 발표. 조원 이용열자료조사, 자료작성, PPT 작성, 보고서작성. 이윤경 자료조사, 자료작성, PPT작성, 보고서작성. 이수은 자료조사, 자료작성, PPT작성, 보고서작성. 발표일 2013. 05.
More informationOCW_C언어 기초
초보프로그래머를위한 C 언어기초 4 장 : 연산자 2012 년 이은주 학습목표 수식의개념과연산자및피연산자에대한학습 C 의알아보기 연산자의우선순위와결합방향에대하여알아보기 2 목차 연산자의기본개념 수식 연산자와피연산자 산술연산자 / 증감연산자 관계연산자 / 논리연산자 비트연산자 / 대입연산자연산자의우선순위와결합방향 조건연산자 / 형변환연산자 연산자의우선순위 연산자의결합방향
More informationMicrosoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt
변수와상수 1 변수란무엇인가? 변수 : 정보 (data) 를저장하는컴퓨터내의특정위치 ( 임시저장공간 ) 메모리, register 메모리주소 101 번지 102 번지 변수의크기에따라 주로 byte 단위 메모리 2 기본적인변수형및변수의크기 변수의크기 해당컴퓨터에서는항상일정 컴퓨터마다다를수있음 short
More informationHere is a "PLDWorld.com"... // EXCALIBUR... // Additional Resources // µc/os-ii... Page 1 of 23 Additional Resources: µc/os-ii Author: Source: HiTEL D
Page 1 of 23 Additional Resources: µc/os-ii Author: Source: HiTEL Digital Sig Date: 2004929 µ (1) uc/os-ii RTOS uc/os-ii EP7209 uc/os-ii, EP7209 EP7209,, CPU ARM720 Core CPU ARM7 CPU wwwnanowitcom10 '
More informationARM Reverse Engineering
singi@hackerschool Facebook : @sjh21a http://kernelhack.co.kr/netsec-singi.zip - First Phase About ARM ARM Operating Mode and Registers Basic ARM Instruction Thumb Mode - Second Phase Configuration of
More informationMicrosoft PowerPoint - [2009] 02.pptx
원시데이터유형과연산 원시데이터유형과연산 원시데이터유형과연산 숫자데이터유형 - 숫자데이터유형 원시데이터유형과연산 표준입출력함수 - printf 문 가장기본적인출력함수. (stdio.h) 문법 ) printf( Test printf. a = %d \n, a); printf( %d, %f, %c \n, a, b, c); #include #include
More informationuntitled
시스템소프트웨어 : 운영체제, 컴파일러, 어셈블러, 링커, 로더, 프로그래밍도구등 소프트웨어 응용소프트웨어 : 워드프로세서, 스프레드쉬트, 그래픽프로그램, 미디어재생기등 1 n ( x + x +... + ) 1 2 x n 00001111 10111111 01000101 11111000 00001111 10111111 01001101 11111000
More informationC++ Programming
C++ Programming 예외처리 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 예외처리 2 예외처리 예외처리 C++ 의예외처리 예외클래스와객체 3 예외처리 예외를처리하지않는프로그램 int main() int a, b; cout > a >> b; cout
More information<4D F736F F F696E74202D203137C0E55FBFACBDC0B9AEC1A6BCD6B7E7BCC72E707074>
SIMATIC S7 Siemens AG 2004. All rights reserved. Date: 22.03.2006 File: PRO1_17E.1 차례... 2 심벌리스트... 3 Ch3 Ex2: 프로젝트생성...... 4 Ch3 Ex3: S7 프로그램삽입... 5 Ch3 Ex4: 표준라이브러리에서블록복사... 6 Ch4 Ex1: 실제구성을 PG 로업로드하고이름변경......
More informationMicrosoft PowerPoint - CSharp-10-예외처리
10 장. 예외처리 예외처리개념 예외처리구문 사용자정의예외클래스와예외전파 순천향대학교컴퓨터학부이상정 1 예외처리개념 순천향대학교컴퓨터학부이상정 2 예외처리 오류 컴파일타임오류 (Compile-Time Error) 구문오류이기때문에컴파일러의구문오류메시지에의해쉽게교정 런타임오류 (Run-Time Error) 디버깅의절차를거치지않으면잡기어려운심각한오류 시스템에심각한문제를줄수도있다.
More informationMicrosoft PowerPoint - hy2-12.pptx
2.4 명령어세트 (instruction set) 명령어세트 CPU 가지원하는기계어명령어들의집합 명령어연산의종류 데이터전송 : 레지스터 / 메모리간에데이터이동 산술연산 : 덧셈, 뺄셈, 곱셈및나눗셈 논리연산 : 비트들간의 AND, OR, NOT 및 XOR 연산 입출력 (I/O) : CPU( 레지스터 ) 와외부장치들간의데이터이동 프로그램제어 : 분기, 서브루틴호출
More information임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과
임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과 System call table and linkage v Ref. http://www.ibm.com/developerworks/linux/library/l-system-calls/ - 2 - Young-Jin Kim SYSCALL_DEFINE 함수
More informationISP and CodeVisionAVR C Compiler.hwp
USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler http://www.avrmall.com/ November 12, 2007 Copyright (c) 2003-2008 All Rights Reserved. USBISP V3.0 & P-AVRISP V1.0 with CodeVisionAVR C Compiler
More information비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2
비트연산자 1 1 비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2 진수법! 2, 10, 16, 8! 2 : 0~1 ( )! 10 : 0~9 ( )! 16 : 0~9, 9 a, b,
More informationC++ Programming
C++ Programming 연산자다중정의 Seo, Doo-okok clickseo@gmail.com http://www.clickseo.com 목 차 연산자다중정의 C++ 스타일의문자열 2 연산자다중정의 연산자다중정의 단항연산자다중정의 이항연산자다중정의 cin, cout 그리고 endl C++ 스타일의문자열 3 연산자다중정의 연산자다중정의 (Operator
More informationMicrosoft PowerPoint - chap04-연산자.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); } 1 학습목표 수식의 개념과 연산자, 피연산자에 대해서 알아본다. C의 를 알아본다. 연산자의 우선 순위와 결합 방향에
More informationADP-2480
Mitsubishi PLC 접속 GP 는 Mitsubishi FX Series 와통신이가능합니다. 시스템구성 6 7 8 GP-80 RS- Cable RS-C Cable FXN--BD FXN--BD 6 FX Series(FXS,FXN,FXN,FXNC, FXU) 7 FXS, FXN 8 FXN FX Series 는기본적으로 RS- 통신을하며, RS-/ converter
More informationvRealize Automation용 VMware Remote Console - VMware
vrealize Automation 용 VMware Remote Console VMware Remote Console 9.0 이문서는새버전으로교체되기전까지나열된각제품버전및모든이후버전을지원합니다. 이문서에대한최신버전을확인하려면 http://www.vmware.com/kr/support/pubs 를참조하십시오. KO-002230-00 vrealize Automation
More information온라인 IT 교육최강 ( 강의정보처리필기강사조대호 차시명 [CA-06 강 ] 프로세서와명령어차시 6 차시 학습내용 프로세서와명령어 학습목표 컴퓨터의구조와프로세서에대해이해할수있다 컴퓨터의명령어에대해이해할수있다 학습내용 1. 컴퓨터의구성 - 1
강의정보처리필기강사조대호 차시명 [CA-06 강 ] 프로세서와명령어차시 6 차시 학습내용 프로세서와명령어 학습목표 컴퓨터의구조와프로세서에대해이해할수있다 컴퓨터의명령어에대해이해할수있다 학습내용 1. 컴퓨터의구성 - 1 - 2. 중앙처리장치 (Central Processing Unit) 주기억장치에기억된명령을꺼내서해독하고, 시스템전체에지시신호를내는장치명령코드가명령을수행할수있게필요한제어기능을제공제어장치의구성
More information[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi
2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Function) 1. 함수의개념 입력에대해적절한출력을발생시켜주는것 내가 ( 프로그래머 ) 작성한명령문을연산, 처리, 실행해주는부분 ( 모듈 ) 자체적으로실행되지않으며,
More information슬라이드 1
명령어집합 주소지정모드 (addressing mode) 내용 명령어는크게연산자부분과이연산에필요한주소부분으로구성 이때주소부분은다양한형태를해석될수있으며, 해석하는방법을주소지정방식 ( 모드 )(addressing mode) 라한다. 즉피연산자정보를구하는방법을주소지정방식이라고함 명령어형식 주소지정 명령어형식에있는주소필드는상대적으로짧다. 따라서지정할수있는위치가제한된다.
More informationVisual Basic 반복문
학습목표 반복문 For Next문, For Each Next문 Do Loop문, While End While문 구구단작성기로익히는반복문 2 5.1 반복문 5.2 구구단작성기로익히는반복문 3 반복문 주어진조건이만족하는동안또는주어진조건이만족할때까지일정구간의실행문을반복하기위해사용 For Next For Each Next Do Loop While Wend 4 For
More informationA Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning
C Programming Practice (II) Contents 배열 문자와문자열 구조체 포인터와메모리관리 구조체 2/17 배열 (Array) (1/2) 배열 동일한자료형을가지고있으며같은이름으로참조되는변수들의집합 배열의크기는반드시상수이어야한다. type var_name[size]; 예 ) int myarray[5] 배열의원소는원소의번호를 0 부터시작하는색인을사용
More informationComputer Architecture
명령어의구조와주소지정방식 명령어세트명령어의형식주소지정방식실제명령어의형태 이자료는김종현저 - 컴퓨터구조론 ( 생능출판사 ) 의내용을편집한것입니다. 2.4 명령어세트 (instruction set) 어떤 CPU 를위하여정의되어있는명령어들의집합 명령어세트설계를위해결정되어야할사항들 2 연산종류 (operation repertoire) CPU 가수행할연산들의수와종류및복잡도
More information10 강. 쉘스크립트 l 쉘스크립트 Ÿ 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 Ÿ 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 Ÿ 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다
10 강. 쉘스크립트 쉘스크립트 쉘은명령어들을연속적으로실행하는인터프리터환경을제공 쉘스크립트는제어문과변수선언등이가능하며프로그래밍언어와유사 프로그래밍언어와스크립트언어 -프로그래밍언어를사용하는경우소스코드를컴파일하여실행가능한파일로만들어야함 -일반적으로실행파일은다른운영체제로이식되지않음 -스크립트언어를사용하면컴파일과정이없고인터프리터가소스파일에서명령문을판독하여각각의명령을수행
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 14. 포인터와함수에대한이해 2013.10.09. 오병우 컴퓨터공학과 14-1 함수의인자로배열전달 기본적인인자의전달방식 값의복사에의한전달 val 10 a 10 11 Department of Computer Engineering 2 14-1 함수의인자로배열전달 배열의함수인자전달방식 배열이름 ( 배열주소, 포인터 ) 에의한전달 #include
More informationMicrosoft Word - Armjtag_문서1.doc
ARM JTAG (wiggler 호환 ) 사용방법 ( IAR EWARM 에서 ARM-JTAG 로 Debugging 하기 ) Test Board : AT91SAM7S256 IAR EWARM : Kickstart for ARM ARM-JTAG : ver 1.0 ( 씨링크테크 ) 1. IAR EWARM (Kickstart for ARM) 설치 2. Macraigor
More information<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>
연습문제해답 5 4 3 2 1 0 함수의반환값 =15 5 4 3 2 1 0 함수의반환값 =95 10 7 4 1-2 함수의반환값 =3 1 2 3 4 5 연습문제해답 1. C 언어에서의배열에대하여다음중맞는것은? (1) 3차원이상의배열은불가능하다. (2) 배열의이름은포인터와같은역할을한다. (3) 배열의인덱스는 1에서부터시작한다. (4) 선언한다음, 실행도중에배열의크기를변경하는것이가능하다.
More information슬라이드 1
-Part3- 제 4 장동적메모리할당과가변인 자 학습목차 4.1 동적메모리할당 4.1 동적메모리할당 4.1 동적메모리할당 배울내용 1 프로세스의메모리공간 2 동적메모리할당의필요성 4.1 동적메모리할당 (1/6) 프로세스의메모리구조 코드영역 : 프로그램실행코드, 함수들이저장되는영역 스택영역 : 매개변수, 지역변수, 중괄호 ( 블록 ) 내부에정의된변수들이저장되는영역
More informationMicrosoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]
Chapter 03 변수와자료형 2009 한국항공대학교항공우주기계공학부 (http://mercury.kau.ac.kr/sjkwon) 1 변수와자료유형 변수 프로그램에서자료값을임시로기억할수있는저장공간을변수 (variables) 변수 (Variables) 는컴퓨터의메모리인 RAM(Random Access Memory) 에저장 물건을담는박스라고생각한다면박스의크기에따라담을물건이제한됨
More information< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>
Chap #2 펌웨어작성을위한 C 언어 I http://www.smartdisplay.co.kr 강의계획 Chap1. 강의계획및디지털논리이론 Chap2. 펌웨어작성을위한 C 언어 I Chap3. 펌웨어작성을위한 C 언어 II Chap4. AT89S52 메모리구조 Chap5. SD-52 보드구성과코드메모리프로그래밍방법 Chap6. 어드레스디코딩 ( 매핑 ) 과어셈블리어코딩방법
More information컴파일러
YACC 응용예 Desktop Calculator 7/23 Lex 입력 수식문법을위한 lex 입력 : calc.l %{ #include calc.tab.h" %} %% [0-9]+ return(number) [ \t] \n return(0) \+ return('+') \* return('*'). { printf("'%c': illegal character\n",
More informationMicrosoft PowerPoint - ch07 - 포인터 pm0415
2015-1 프로그래밍언어 7. 포인터 (Pointer), 동적메모리할당 2015 년 4 월 4 일 교수김영탁 영남대학교공과대학정보통신공학과 (Tel : +82-53-810-2497; Fax : +82-53-810-4742 http://antl.yu.ac.kr/; E-mail : ytkim@yu.ac.kr) Outline 포인터 (pointer) 란? 간접참조연산자
More informationMicrosoft PowerPoint - LN_1_ARM_CPU_0.ppt [호환 모드]
프로젝트 1 1 ARM CPU Architecture 단국대학교컴퓨터학과 2009 백승재 ibanez1383@dankook.ac.kr k k http://embedded.dankook.ac.kr/~ibanez1383 강의목표 2 ARM 종류와특징및최신동향파악 ARM CPU Architecture 이해 ARM Assembly 숙지 ARM 3 ARM? Advanced
More informationChapter ...
Chapter 4 프로세서 (4.9절, 4.12절, 4.13절) Contents 4.1 소개 4.2 논리 설계 기초 4.3 데이터패스 설계 4.4 단순한 구현 방법 4.5 파이프라이닝 개요*** 4.6 파이프라이닝 데이터패스 및 제어*** 4.7 데이터 해저드: 포워딩 vs. 스톨링*** 4.8 제어 해저드*** 4.9 예외 처리*** 4.10 명령어 수준
More informationMicrosoft PowerPoint - e pptx
Import/Export Data Using VBA Objectives Referencing Excel Cells in VBA Importing Data from Excel to VBA Using VBA to Modify Contents of Cells 새서브프로시저작성하기 프로시저실행하고결과확인하기 VBA 코드이해하기 Referencing Excel Cells
More informationView Licenses and Services (customer)
빠른 빠른 시작: 시작: 라이선스, 라이선스, 서비스 서비스 및 주문 주문 이력 이력 보기 보기 고객 가이드 Microsoft 비즈니스 센터의 라이선스, 서비스 및 혜택 섹션을 통해 라이선스, 온라인 서비스, 구매 기록 (주문 기록)을 볼 수 있습니다. 시작하려면, 비즈니스 센터에 로그인하여 상단 메뉴에서 재고를 선택한 후 내 재고 관리를 선택하십시오. 목차
More informationMicrosoft PowerPoint - chap05-제어문.pptx
int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); 1 학습목표 제어문인,, 분기문에 대해 알아본다. 인 if와 switch의 사용 방법과 사용시 주의사항에 대해 알아본다.
More informationMicrosoft Word - ExecutionStack
Lecture 15: LM code from high level language /* Simple Program */ external int get_int(); external void put_int(); int sum; clear_sum() { sum=0; int step=2; main() { register int i; static int count; clear_sum();
More information금오공대 컴퓨터공학전공 강의자료
C 프로그래밍프로젝트 Chap 13. 포인터와배열! 함께이해하기 2013.10.02. 오병우 컴퓨터공학과 13-1 포인터와배열의관계 Programming in C, 정재은저, 사이텍미디어. 9 장참조 ( 교재의 13-1 은읽지말것 ) 배열이름의정체 배열이름은 Compile 시의 Symbol 로서첫번째요소의주소값을나타낸다. Symbol 로서컴파일시에만유효함 실행시에는메모리에잡히지않음
More information학습목차 r 컴퓨터본체에서 CPU 의위치살펴보기 r CPU 의성능 r CPU 의기능 r CPU 의조직 r 레지스터의조직 r 명령어사이클 r 명령어파이프라이닝 컴퓨터구조 2 9. CPU 조직과기능
컴퓨터구조 제 9 강 중앙처리장치의조직과기능 학습목차 r 컴퓨터본체에서 CPU 의위치살펴보기 r CPU 의성능 r CPU 의기능 r CPU 의조직 r 레지스터의조직 r 명령어사이클 r 명령어파이프라이닝 컴퓨터구조 2 9. CPU 조직과기능 학습목표 rcpu 의성능을향상시키는요인들을알아본다. rcpu 의기본적인기능을이해한다. rcpu 는 ALU, 제어장치, 레지스터집합,
More informationIRISCard Anywhere 5
이 빠른 사용자 가이드는 IRISCard Anywhere 5 및 IRISCard Corporate 5 스캐너의 설치와 시작을 도와 드립니다. 이 스캐너와 함께 제공되는 소프트웨어는: - Cardiris Pro 5 및 Cardiris Corporate 5 for CRM (Windows 용) - Cardiris Pro 4 (Mac OS 용) Cardiris 의
More informationUser Guide
HP ThinUpdate 관리자 설명서 Copyright 2016 HP Development Company, L.P. Windows는 미국 및/또는 기타 국가에서 Microsoft Corporation의 등록 상표 또는 상표입 니다. 기밀 컴퓨터 소프트웨어. 소유, 사용 또는 복사 에 필요한 유효한 사용권을 HP로부터 취득했 습니다. FAR 12.211 및
More informationMicrosoft PowerPoint - a6.ppt [호환 모드]
이장의내용 6 장조건부처리 부울과비교명령어 조건부점프 조건부루프명령어 조건부구조 컴퓨터정보통신 어셈블리언어 2 6.2 부울과비교명령어 부울명령어 Instructions ti 동작 AND dst, src OR dst, src XOR dst, src NOT dst dst dst AND src dst dst OR src dst dst XOR src dst NOT
More informationMicrosoft PowerPoint - o8.pptx
메모리보호 (Memory Protection) 메모리보호를위해 page table entry에 protection bit와 valid bit 추가 Protection bits read-write / read-only / executable-only 정의 page 단위의 memory protection 제공 Valid bit (or valid-invalid bit)
More informationC# Programming Guide - Types
C# Programming Guide - Types 최도경 lifeisforu@wemade.com 이문서는 MSDN 의 Types 를요약하고보충한것입니다. http://msdn.microsoft.com/enus/library/ms173104(v=vs.100).aspx Types, Variables, and Values C# 은 type 에민감한언어이다. 모든
More information5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp
1 0 1.7 6 5 'A ' '/ u 4 4 2 2 ' " JS P 프로그래밍 " A ', 'b ', ' 한 ', 9, \ u d 6 5 4 ' c h a r a = 'A '; 0 1 0 2 0 3 0 4 0 5 0 6 0 7 0 8 0 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 < % @ p a g e c o n te n
More informationMicrosoft PowerPoint - chap06-2pointer.ppt
2010-1 학기프로그래밍입문 (1) chapter 06-2 참고자료 포인터 박종혁 Tel: 970-6702 Email: jhpark1@snut.ac.kr 한빛미디어 출처 : 뇌를자극하는 C프로그래밍, 한빛미디어 -1- 포인터의정의와사용 변수를선언하는것은메모리에기억공간을할당하는것이며할당된이후에는변수명으로그기억공간을사용한다. 할당된기억공간을사용하는방법에는변수명외에메모리의실제주소값을사용하는것이다.
More informationOperating Instructions
작동지침 Mopria 설명서 안전하고올바른사용을위해기기를사용하기전에 " 안전정보 " 를읽으십시오. 목차 소개...2 기호의의미... 2 고지사항...2 준비...3 같은네트워크에서기기와 Android 기기연결하기...3 기기설정확인하기... 3 1. Mopria 인쇄사용하기 Mopria 인쇄서비스소개...5 Android 기기설정하기... 6 인쇄...7
More informationInstall stm32cubemx and st-link utility
STM32CubeMX and ST-LINK Utility for STM32 Development 본문서는 ST Microelectronics 의 ARM Cortex-M 시리즈 Microcontroller 개발을위해제공되는 STM32CubeMX 와 STM32 ST-LINK Utility 프로그램의설치과정을설명합니다. 본문서는 Microsoft Windows 7
More informationPowerPoint Presentation
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 변수와상수의개념에대해알아본다.
More information<C1A4BAB8C3B3B8AE5FB1E2BBE75FC7CAB1E25F E687770>
3.2 명령어 (1) 명령어 (Instruction) 의구성 연산자 (Operation Code) 부자료 (Operand) 부 0405 명령어의연산자부분이나타낼수있는것오답 인스트럭션의순서 1) 연산자부 (Op-Code, Operation Code부 ) 1 실행할명령이들어있음 2 명령어의연산자부분이나타낼수있는것 9910 0203 명령어의형식 연산자 자료의종류
More informationPowerPoint 프레젠테이션
실습 1 배효철 th1g@nate.com 1 목차 조건문 반복문 System.out 구구단 모양만들기 Up & Down 2 조건문 조건문의종류 If, switch If 문 조건식결과따라중괄호 { 블록을실행할지여부결정할때사용 조건식 true 또는 false값을산출할수있는연산식 boolean 변수 조건식이 true이면블록실행하고 false 이면블록실행하지않음 3
More informationC 프로그램의 기본
C 프로그램의기본 목차 C 프로그램의구성요소 주석 main 함수 출력 C 언어의입력과출력 변수 printf 함수 scanf 함수 2 예제 2-1 : 첫번째 C 프로그램 3 2.1.1 주석 주석의용도 프로그램에대한설명 프로그램전체에대한대략적인정보를제공 프로그램수행에영향을미치지않는요소 4 2.1.1 주석 주석사용방법 /* 과 */ 을이용한여러줄주석 // 을이용한한줄주석
More informationChapter 4. LISTS
C 언어에서리스트구현 리스트의생성 struct node { int data; struct node *link; ; struct node *ptr = NULL; ptr = (struct node *) malloc(sizeof(struct node)); Self-referential structure NULL: defined in stdio.h(k&r C) or
More information설계란 무엇인가?
금오공과대학교 C++ 프로그래밍 jhhwang@kumoh.ac.kr 컴퓨터공학과 황준하 6 강. 함수와배열, 포인터, 참조목차 함수와포인터 주소값의매개변수전달 주소의반환 함수와배열 배열의매개변수전달 함수와참조 참조에의한매개변수전달 참조의반환 프로그래밍연습 1 /15 6 강. 함수와배열, 포인터, 참조함수와포인터 C++ 매개변수전달방법 값에의한전달 : 변수값,
More information<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>
리눅스 오류처리하기 2007. 11. 28 안효창 라이브러리함수의오류번호얻기 errno 변수기능오류번호를저장한다. 기본형 extern int errno; 헤더파일 라이브러리함수호출에실패했을때함수예 정수값을반환하는함수 -1 반환 open 함수 포인터를반환하는함수 NULL 반환 fopen 함수 2 유닉스 / 리눅스 라이브러리함수의오류번호얻기 19-1
More informationMicrosoft PowerPoint - a10.ppt [호환 모드]
Structure Chapter 10: Structures t and Macros Structure 관련된변수들의그룹으로이루어진자료구조 template, pattern field structure를구성하는변수 (cf) C언어의 struct 프로그램의 structure 접근 entire structure 또는 individual fields Structure는
More informationJAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각
JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( http://java.sun.com/javase/6/docs/api ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각선의길이를계산하는메소드들을작성하라. 직사각형의가로와세로의길이는주어진다. 대각선의길이는 Math클래스의적절한메소드를이용하여구하라.
More informationEmbedded System
컴퓨터시스템구조론 (3 장 ) Taehyoun Kim Dept. of Mechanical & Information Engineering, University of Seoul Outline 간단한컴퓨터 (Basic Computer) 를이용한어셈블리이해 어셈블리프로그램기본구조 ARM 어셈블리어 간단한컴퓨터를이용한어셈블리이해 어셈블리어란? 프로그램 (Program)
More informationPowerPoint Presentation
객체지향프로그래밍 클래스, 객체, 메소드 ( 실습 ) 손시운 ssw5176@kangwon.ac.kr 예제 1. 필드만있는클래스 텔레비젼 2 예제 1. 필드만있는클래스 3 예제 2. 여러개의객체생성하기 4 5 예제 3. 메소드가추가된클래스 public class Television { int channel; // 채널번호 int volume; // 볼륨 boolean
More information강의 개요
DDL TABLE 을만들자 웹데이터베이스 TABLE 자료가저장되는공간 문자자료의경우 DB 생성시지정한 Character Set 대로저장 Table 생성시 Table 의구조를결정짓는열속성지정 열 (Clumn, Attribute) 은이름과자료형을갖는다. 자료형 : http://dev.mysql.cm/dc/refman/5.1/en/data-types.html TABLE
More informationMicrosoft PowerPoint - Chapter_04.pptx
프로그래밍 1 1 Chapter 4. Constant and Basic Data Types April, 2016 Dept. of software Dankook University http://embedded.dankook.ac.kr/~baeksj 이장의강의목표 2 기본자료형문자표현방식과문자자료형상수자료형변환 기본자료형 (1/8) 3 변수 (Variables)
More informationBY-FDP-4-70.hwp
RS-232, RS485 FND Display Module BY-FDP-4-70-XX (Rev 1.0) - 1 - 1. 개요. 본 Display Module은 RS-232, RS-485 겸용입니다. Power : DC24V, DC12V( 주문사양). Max Current : 0.6A 숫자크기 : 58mm(FND Size : 70x47mm 4 개) RS-232,
More informationPowerPoint 프레젠테이션
Verilog: Finite State Machines CSED311 Lab03 Joonsung Kim, joonsung90@postech.ac.kr Finite State Machines Digital system design 시간에배운것과같습니다. Moore / Mealy machines Verilog 를이용해서어떻게구현할까? 2 Finite State
More informationCisco FirePOWER 호환성 가이드
Cisco 호환성가이드 Cisco 호환성 이문서에서는 Cisco 소프트웨어와하드웨어의호환성및요건을다룹니다. 추가 릴리스또는제품정보는다음을참조하십시오. 설명서로드맵 : http://www.cisco.com/c/en/us/td/docs/security/firesight/ roadmap/firesight-roadmap.html Cisco ASA 호환성가이드 : http://www.cisco.com/c/en/us/td/docs/security/asa/compatibility/
More information11장 포인터
누구나즐기는 C 언어콘서트 제 9 장포인터 이번장에서학습할내용 포인터이란? 변수의주소 포인터의선언 간접참조연산자 포인터연산 포인터와배열 포인터와함수 이번장에서는포인터의기초적인지식을학습한다. 포인터란? 포인터 (pointer): 주소를가지고있는변수 메모리의구조 변수는메모리에저장된다. 메모리는바이트단위로액세스된다. 첫번째바이트의주소는 0, 두번째바이트는 1, 변수와메모리
More informationPowerPoint 프레젠테이션
Lecture 02 프로그램구조및문법 Kwang-Man Ko kkmam@sangji.ac.kr, compiler.sangji.ac.kr Department of Computer Engineering Sang Ji University 2018 자바프로그램기본구조 Hello 프로그램구조 sec01/hello.java 2/40 자바프로그램기본구조 Hello 프로그램구조
More information사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을
IDIS Mobile ios 사용설명서 Powered by 사용설명서를 읽기 전에 ios용 아이디스 모바일은 네트워크 연결을 통해 ios 플랫폼 기반의 모바일 기기(iOS 버전 6.0 이상의 ipod Touch, iphone 또는 ipad)에서 장치(DVR, 네트워크 비디오 서버 및 네트워크 카메라)에 접속하여 원격으로 영상을 감시할 수 있는 프로그램입니다.
More informationMicrosoft PowerPoint - hy2-12.pptx
CPU의구조와기능 CPU 의명령어수행과정 명령어인출 (Instruction Fetch) : 기억장치로부터명령어를읽어온다 명령어해독 (Instruction Decode) : 수행해야할동작을결정하기위하여명령어를해독한다 모든명령어들에대하여공통적으로수행 데이터인출 (Data Fetch) : 명령어실행을위하여데이터가필요한경우에는기억장치혹은 I/O 장치로부터그데이터를읽어온다
More informationPowerPoint 프레젠테이션
1. data-addressing mode CHAPTER 6 Addressing Modes 2. use of data-address mode to form assembly language statements 3. op of program memory address mode 4. use of program memory address mode to form assembly
More informationMicrosoft PowerPoint - 15-MARS
MARS 소개및실행 어셈블리프로그램실행예 순천향대학교컴퓨터공학과이상정 1 MARS 소개및실행 순천향대학교컴퓨터공학과 2 MARS 소개 MARS MIPS Assembler and Runtime Simulator MIPS 어셈블리언어를위한소프트웨어시뮬레이터 미주리대학 (Missouri State Univ.) 의 Ken Vollmar 등이자바로개발한교육용시뮬레이터
More informationMicrosoft PowerPoint - hw8.ppt [호환 모드]
8.1 데이터경로와제어장치 Chapter 8 데이터경로와제어장치 많은순차회로의설계는다음의두부분으로구성 datapath: data의이동및연산을위한장치 control unit에상태신호제공 control ol unit: datapath th 에서적절한순서로 data 이동및연산을수행할수있도록제어신호제공. 먼저, datapath를설계 다음에, control unit
More informationMicrosoft PowerPoint 자바-기본문법(Ch2).pptx
자바기본문법 1. 기본사항 2. 자료형 3. 변수와상수 4. 연산자 1 주석 (Comments) 이해를돕기위한설명문 종류 // /* */ /** */ 활용예 javadoc HelloApplication.java 2 주석 (Comments) /* File name: HelloApplication.java Created by: Jung Created on: March
More informationChapter #01 Subject
Device Driver March 24, 2004 Kim, ki-hyeon 목차 1. 인터럽트처리복습 1. 인터럽트복습 입력검출방법 인터럽트방식, 폴링 (polling) 방식 인터럽트서비스등록함수 ( 커널에등록 ) int request_irq(unsigned int irq, void(*handler)(int,void*,struct pt_regs*), unsigned
More informationPowerPoint 프레젠테이션
Web server porting 2 Jo, Heeseung Web 을이용한 LED 제어 Web 을이용한 LED 제어프로그램 web 에서데이터를전송받아타겟보드의 LED 를조작하는프로그램을작성하기위해다음과같은소스파일을생성 2 Web 을이용한 LED 제어 LED 제어프로그램작성 8bitled.html 파일을작성 root@ubuntu:/working/web# vi
More information학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2
학습목표 함수프로시저, 서브프로시저의의미를안다. 매개변수전달방식을학습한다. 함수를이용한프로그래밍한다. 2 6.1 함수프로시저 6.2 서브프로시저 6.3 매개변수의전달방식 6.4 함수를이용한프로그래밍 3 프로시저 (Procedure) 프로시저 (Procedure) 란무엇인가? 논리적으로묶여있는하나의처리단위 내장프로시저 이벤트프로시저, 속성프로시저, 메서드, 비주얼베이직내장함수등
More informationMicrosoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600
균형이진탐색트리 -VL Tree delson, Velskii, Landis에의해 1962년에제안됨 VL trees are balanced n VL Tree is a binary search tree such that for every internal node v of T, the heights of the children of v can differ by at
More information<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >
10주차 문자 LCD 의인터페이스회로및구동함수 Next-Generation Networks Lab. 5. 16x2 CLCD 모듈 (HY-1602H-803) 그림 11-18 19 핀설명표 11-11 번호 분류 핀이름 레벨 (V) 기능 1 V SS or GND 0 GND 전원 2 V Power DD or V CC +5 CLCD 구동전원 3 V 0 - CLCD 명암조절
More information목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.
소프트웨어매뉴얼 윈도우드라이버 Rev. 3.03 SLP-TX220 / TX223 SLP-TX420 / TX423 SLP-TX400 / TX403 SLP-DX220 / DX223 SLP-DX420 / DX423 SLP-DL410 / DL413 SLP-T400 / T403 SLP-T400R / T403R SLP-D220 / D223 SLP-D420 / D423
More informationTcl의 문법
월, 01/28/2008-20:50 admin 은 상당히 단순하고, 커맨드의 인자를 스페이스(공백)로 단락을 짓고 나열하는 정도입니다. command arg1 arg2 arg3... 한행에 여러개의 커맨드를 나열할때는, 세미콜론( ; )으로 구분을 짓습니다. command arg1 arg2 arg3... ; command arg1 arg2 arg3... 한행이
More information슬라이드 1
CCS v4 사용자안내서 CCSv4 사용자용예제따라하기안내 0. CCS v4.x 사용자 - 준비사항 예제에사용된 CCS 버전은 V4..3 버전이며, CCS 버전에따라메뉴화면이조금다를수있습니다. 예제실습전준비하기 처음시작하기예제모음집 CD 를 PC 의 CD-ROM 드라이브에삽입합니다. 아래안내에따라, 예제소스와헤더파일들을 PC 에설치합니다. CD 드라이브 \SW\TIDCS\TIDCS_DSP80x.exe
More information<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>
뻔뻔한 AVR 프로그래밍 The Last(8 th ) Lecture 유명환 ( yoo@netplug.co.kr) INDEX 1 I 2 C 통신이야기 2 ATmega128 TWI(I 2 C) 구조분석 4 ATmega128 TWI(I 2 C) 실습 : AT24C16 1 I 2 C 통신이야기 I 2 C Inter IC Bus 어떤 IC들간에도공통적으로통할수있는 ex)
More informationchap 5: Trees
5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경
More information경우 1) 80GB( 원본 ) => 2TB( 복사본 ), 원본 80GB 는 MBR 로디스크초기화하고 NTFS 로포맷한경우 복사본 HDD 도 MBR 로디스크초기화되고 80GB 만큼포맷되고나머지영역 (80GB~ 나머지부분 ) 은할당되지않음 으로나온다. A. Window P
Duplicator 는기본적으로원본하드디스크를빠르게복사본하드디스크에복사하는기능을하는것입니다.. 복사본 하드디스크가원본하드디스크와똑같게하는것을목적으로하는것이어서저용량에서고용량으로복사시몇 가지문제점이발생할수있습니다. 하드디스크는사용하려면, 디스크초기화를한후에포맷을해야사용가능합니다. Windows PC는 MBR과 GPT 2 개중에 1개로초기화합니다. -Windows
More information학습목차 2.1 다차원배열이란 차원배열의주소와값의참조
- Part2- 제 2 장다차원배열이란무엇인가 학습목차 2.1 다차원배열이란 2. 2 2 차원배열의주소와값의참조 2.1 다차원배열이란 2.1 다차원배열이란 (1/14) 다차원배열 : 2 차원이상의배열을의미 1 차원배열과다차원배열의비교 1 차원배열 int array [12] 행 2 차원배열 int array [4][3] 행 열 3 차원배열 int array [2][2][3]
More informationAPI 매뉴얼
PCI-TC03 API Programming (Rev 1.0) Windows, Windows2000, Windows NT, Windows XP and Windows 7 are trademarks of Microsoft. We acknowledge that the trademarks or service names of all other organizations
More informationMicrosoft PowerPoint - chap10-함수의활용.pptx
#include int main(void) { int num; printf( Please enter an integer: "); scanf("%d", &num); if ( num < 0 ) printf("is negative.\n"); printf("num = %d\n", num); return 0; } 1 학습목표 중 값에 의한 전달 방법과
More informationEclipse Plug-in for RealView Development Suite 사용 설명서
Eclipse Plug-in for RealView Development Suite 버전 1.0 사용설명서 Copyright 2006 ARM Limited. All rights reserved. ARM DUI 0330AK Eclipse Plug-in for RealView Development Suite 사용설명서 Copyright 2006 ARM Limited.
More information학습목차 r 개념으로살펴보는 CPU 속의제어장치 r 마이크로연산 r 제어장치의동작 r 마이크로프로그램을이용한제어 컴퓨터구조 제어장치
컴퓨터구조 제 12 강제어장치 학습목차 r 개념으로살펴보는 CPU 속의제어장치 r 마이크로연산 r 제어장치의동작 r 마이크로프로그램을이용한제어 컴퓨터구조 2 12. 제어장치 학습목표 r 프로세스내의제어장치의기능과역할을공부한다. r 마이크로연산의표현을공부하다. r제어장치의구성과마이크로연산을공부한다. r제어장치의구현방법을알아본다. r 마이크로프로그램을이용한제어장치의구조와동작을공부한다.
More information<4D F736F F F696E74202D20C1A632C0E520C7C1B7CEB1D7B7A5B0B3B9DFB0FAC1A4>
쉽게풀어쓴 C 언어 Express 제 2 장프로그램개발과정 통합개발환경 통합개발환경 (IDE: integrated development environment) 에디터 + 컴파일러 + 디버거 Visual C++: 이클립스 (eclipse): Dev-C++: 마이크로소프트제작 오픈소스프로젝트 오픈소스프로젝트 통합개발환경의종류 비주얼 C++(Visual C++)
More information