FW 심화 과정/[1] HDL, ARM프로세서설계

0627 컴퓨터 구조 이론 (1) High lang -> Assembly

천숭이 2022. 6. 27. 21:26

■ 컴퓨터란?

사술, 논리 연산을 자동으로 실행해주는 전자장치

 

■ 컴퓨터 역사

- 컴퓨터는 탄생한지 100년도 채 되지 않았다

- ENIAC은 1946년에 탄생한 최초의 컴퓨터이고, EDSAC은 최초로 프로그램이 탑재된 1969년에 탄생한 컴퓨터이다.

 

■ 컴퓨터의 종류

- 개인컴퓨터 : 일반 데스크톱

- 서버컴퓨터 : 네트워크 기반 컴퓨팅, 사용자 다중 접속 가능

- 슈퍼컴퓨터 : 연산력이 좋은 비싼 컴퓨터

- 임베디드컴퓨터 : 전력 소모가 적고 성능이 디바이스에 맞춰져 있는 제품

 

컴퓨터의 구성요소

1. input

2. output

3. memory

4. datapath

5. control

 

■ 소프트웨어 종류

- 응용 s/w : 고급언어로 작성됨. 예) 문서 작성 프로그램, 개발 툴

     -> 하드웨어 몰라도 됨

- 시스템 s/w : 자원을 제어하고 관리. 예) 운영체제

     -> 하드웨어 구송요소 이해해야 됨

 

■ 프로그램 코드 변환과정

High-level 언어 : 사람이 이해하기 좋은 언어

 

↓ Compiler

 

어셈블리 언어 : 프로세서 종류에 따른 명령어로 변환

 

↓ Assembler

 

기계언어 : binary code,컴파일러와 일대일 매핑돼서 번역

 

 

■ ARM 기반 프로세서 명령어 집합 LEGV8 사용

operator  destintion operands, src1 operands, src2 operands

 

■ c코드 -> 어셈블리어 변환 예시

c코드 :

f = (g+h) - (i+j);

 

compiled LEGv8 code :

// dest, src1, src2 순으로 작성
ADD t0, g, h  // temp to = g+h
ADD t1, i, j  // temp t1 = i+j
SUB f, t0, t1 // f = t0 - t1

 


■ 엔디언

- 빅엔디언 : 메모리의 lsb, msb와 반대로 바이트가 포매팅

- 리틀엔디언 : 매모리의 lsb, msb 맞춰서 포매팅

 

▣ 명령어 타입 세가지

1. 레지스터 명령어

2. 메모리 명령어

3. Immediate 명령어

 

알아야 할 단위!
- 1Byte           = 8bit
- half              = 16bit = 2Byte
- word            = 32bit = 4Byte
- doubleword = 64bit = 8Byte

 

■ 1. 레지스터 명령어

- LEGv8은 32*64bit 레지스터 파일을 가지고 있음

- X0 ~ X30 까지는 개인 목적의 레지스터 -> 사용자가 작성

- W0 ~ W30 까지는 서브 레지스터

- XZR는 0으로 채워져있고, 읽기만 가능한 영역

- 총 256Byte 

 

 

■ 2. 메모리 명령어

- 레지스터는 256Byte 공간만을 사용하기에 너무 적은 편이다. 따라서 메모리 주소공간을 사용한다.

- 메모리와 레지스터 사이에 옮기고 가져오는 작업을 Load & Store 명령어로 작성 가능

- 이때, 메모리는 Byte단위이고 레지스터는 8Byte 단위이다.

- 따라서 메모리와 레지스터는 8 offset

  (offset : 프로세서와 메모리 단위 차이)

// LDUR : Load Mem to Reg
LDUR x9, [x22, #64]
//   dst, src, src
// R[x9] = M[R[x22] + 64] = M[1064] = memory A[8] 값

ADD  x9, x21 , x9
//   dst, src, src
//   R[x9] = R[x21] + R[x9]

// STUR : store Reg to Mem
STUR x9, [x22, #96]
//   src, dst
// M[R[x22] + 96] 를 A[12]에 store해라

 

■ Immediate 명령어

- 명령어 끝에 I가 있으면 Immediate 명령어

ADDI  x22, x22, #4    // #4 라는 정적변수를 사용한 예시

 

 

~ 134쪽