ARM Assembly의 내부구조를 이해하고 명령어를 실행하여, 사용방법을 알아본다.
본 자료는 9페이지 의 미리보기를 제공합니다. 이미지를 클릭하여 주세요.
닫기
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
해당 자료는 9페이지 까지만 미리보기를 제공합니다.
9페이지 이후부터 다운로드 후 확인할 수 있습니다.

소개글

ARM Assembly의 내부구조를 이해하고 명령어를 실행하여, 사용방법을 알아본다.에 대한 보고서 자료입니다.

목차

1. Title

2. Name

3. Abstract

4. Background

5. Experimental Results
1) ARM assembly의 구조
2) Calling Subroutine
3) Constant
4) Conditional Execution
5) Loading constant into registers
6) Memory access instructions
7) General data processing instructions

6. Discussion

7. References

본문내용

바꾸고 [PC+offset] 위치에서 {size}만큼 DATA를 읽어 R0에 저장한다.
2) 라벨 Data32bit의 위치에서 데이터를 읽어 R1에 저장한다. 이러한 방식은 어셈블러가 라벨을 [PC, #] 형태로 바꾸고 [PC+offset] 위치에서 {size}만큼 데이터를 읽어 R1에 저장한다.
1.4 op{cond}{B}{T} Rd, [Rn], FlexOffset
Pre-index 방식: [Rn, offset]!
일반 방식과 동일하게 메모리 접근 주소를 계산
메모리 접근후에 베이스 레지스터의 값을 메모리 접근 값으로 변경
자동 증가/감소 기능
STR R1, [R0, #4] ; R1 ->M[R0+4]
STR R1, [R0, #4]! ; R1 ->M[R0+4], then R0 <-R0+4
LDR R1, [R0, -R2] ; R1 <-M[R0-R2]
LDR R1, [R0, -R2]! ; R1 <-M[R0-R2], then R0 <-R0-R2
Post-index 방식: [Rn], offset
베이스 레지스터만 가지고 메모리 접근 주소를 계산
메모리 접근후에 베이스 레지스터의 값에 옵셋 값을 더한다.
자동 증가/감소 기능
LDR R1, [R0], R2 ; R1 <-M[R0], then R0 <-R0+R2
STR R1, [R0], #4 ; R1->M[R0], then R0 <-R0+4
AREA general, CODE, READONLY
ENTRY
ldr r0, =0x800
ldr r2,[r0]
ldr r2,[r0], #0x08 ;#expr -4095<= expr <=4095
ldr r2, [r0]
ldr r2, [r0, #0x80]!
END
AREA general, CODE, READONLY
ENTRY
ldr r0, =0x8000
mov r1, #0x04
ldr r2, [r0], r1, LSL #1
END
2. Load Signed 8bit, Singed and Unsigned 16bit halfword/Store 16bit halfword
2.1.op{cond}type Rd, [Rn]
AREA general, CODE, READONLY
ENTRY
mov r0, #0
add r0, r0, r0 ;reset carry
ldr r1,=0x8100
ldr r2, =-1234
str r2, [r1]
ldrsh r2, [r1]
ldrh r2, [r1]
ldrsb r2, [r1]
ldreqsh r2, [r1]
ldreqsb r2, [r1]
END
3. LDM and STM
Multiple Load/Store 명령어의 동작을 그림을 그려 설명하시오.
ldmia r8, {r0, r2, r9} ;Post-Increment 주소지정방식
stmdb r1!, {r3-r6, r11, r12};Pre-Decrement 주소지정 방식
stmfd sp!, {r0, r4-r7,lr} ;스택을 위한 블록 단위 전송명령
ldmfd sp!, {r0, r4-r7,pc};스택을 위한 블록 단위 전송명령
- Post-Increment 주소지정방식 :
먼저 데이터를 읽거나 저장한 후 어드레스를 증가하는 방식으로 다음 그림과 같이 동작한다.
- Pre-Decrement 주소지정 방식 : 먼저 어드레스를 감소하고, 데이터를 읽거나 저장하는 방식이다. ARM에는 어드레스를 자동으로 increment하는 로직은 있지만 decrement하는 것은 없다. 따라서 decrement 동작은 먼저 ALU를 이용하여 어드레스를 계산한후 어드레스를 증가하면서 데이터를 읽거나 쓴다. Pre-decrement 주소지정 방식은 다음 그림과 같이 동작한다.
- 스택을 위한 블록 단위 전송명령
밑에 그림에서 PUSH 동안에는 SP에 지정된 위치에서 어드레스를 레지스터 리스트만큼 감소 후 각 레지스터를 저장하고, 처리가 완료된 후 POP 동작에서는 다시 데이터를 읽어 각 레지스터에 복원한다. 이때 PUSH된 LR 레지스터를 POP 동작에서 PC로 복원하면 함수가 리턴된다.
7) General data processing instructions
AREA general, CODE, READONLY
ENTRY
mov r0, #1
mov r1, #2
cmp r0, r1
mov r0, #2
mov r1, #1
cmp r0, r1
mov r0, #1
mov r1, #1
cmp r0, r1
end
AREA general, CODE, READONLY
ENTRY
ldr r1, =0x8100
ldr r2, =0x10
str r2, [r1]
ldr r2, [r1]
ldr r3, =0x10
ldr r3, =0x20
tst r2, r3
beq zero28th
bne nonzero28th
zero28th
nop
nop
nonzero28th
nop
nop
end
8)Flowchar -> assembly code
다음 Flowchat를 Assembly로 코딩하시오
AREA assembly, CODE, READONLY
ENTRY
MOV r0, #0x00000040
mov r1, #0x00000010
start
cmp r0, r1
subgt r0, r0, r1
sublt r1, r1, r0
bne start
stop b stop
END
6.Discussion
ARM 프로세서를 Assembly로서 제어해 보았다. Assembly는 프로그래밍 언어로서, 기계어와 1대1로 대응하는 언어로서 사람이 이해하기 쉽게 변형시킨 언어이다. 이러한 특징 때문에 프로세서 내에 하드웨어의 특성을 가장 잘 살릴 수 있으며 내부구조를 알 수 있는 장점이 있다. 때문에 ARM 프로세서의 32비트, 파이프라인 등과 이전에 배웠던 마이크로프로세서와 다른 레지스터와 어셈블리 명령어 등을 이해할 수 있었다. 하지만 어셈블리언어로서 이러한 과정이 매우 복잡하고 이해하기 어렵다는 것이 단점이다.
7.References
[1] 안효복. "ARM으로 배우는 임베디드 시스템“, 한빛미디어(주), 2006.
[2] 윤덕용, “어셈블리와 C언어로 익히는 8051 마스터”, Ohm사, 2000.
[3] 윤덕용, “ARM7TDMI AT91SAM7S256으로 시작하기”, Ohm사, 2000.
  • 가격3,000
  • 페이지수28페이지
  • 등록일2011.12.30
  • 저작시기2011.9
  • 파일형식한글(hwp)
  • 자료번호#723606
본 자료는 최근 2주간 다운받은 회원이 없습니다.
청소해
다운로드 장바구니