본문 바로가기

카테고리 없음

마이크로프로세서(18) ARM architecture

728x90
반응형

마이크로프로세서 강의 목차(여기를 클릭)
** 경북대학교 전자공학부 박은진 교수님 마프 [기말고사] 범위입니다. 앞으로 ARM 아키텍처로 공부합니다. 
** 관련 교재는 무료 pdf를 쉽게 구할 수 있으므로 교재를 참고하세요. 족보가 필요하시다면 댓글로 ~~

 
 
1. OT (8085 모델과 비교해보는 ARM)
하드웨어 인터페이스는 동일하다. 
프로세스의 내부 구조가 다르다. ALU가 나눠져 있어 연산할 준비가 되어 있다.  8bit가 4번 입력되는 것이 아닌, 32bit가 동시에 입력된다. 이러한 경우에 opcode는 CU에, data와 주소는 ALU로 미리 이동해 있는다. 프로그램 메모리, 데이터 메모리가 따로 나누어져 있다.
컴파일을 누르면 실행된다. C 소스코드를 짜기 -> 컴파일 -> 어셈블러 언어 생성 -> opject 코드. 프로세스마다 어셈블러가 다 다르다. 
8085 모델과 마찬가지로 산술 연산, 논리 연산, data transfer, latch, jump(branch라고 부른다.)의 기능을 한다. 
 
 
2. MIPS, RISC, ARM
MIPS와 RISC : 메모리 32bit, 명령어 32bit, 내부 레지스터 32개(각각 32bit)
ARM : 메모리 64bit, 명령어 32bit, 내부 레지스터 32개(각각 64bit)

ARM은 내부 레지스터 중 X0부터 X27까지 사용할 수 있다. X28은 SP(stack pointer), X29는 FP(frame pointer), X30은 R(return address)로 사용된다. X31은 0, XZR로 사용된다. X31은 크기 비교 등 비교대상으로 자주 사용되므로 다른 데이터를 이 안에 집어넣을 순 없다. 

 
 
3. 명령어 문법
(1) 피연산자가 3개, b + c를 a에 저장해라. b - c를 a에 저장해라. 

ADD a, b, c
SUB a, b, c

   

(2) f = (a+b) - (c+d);

ADD t0, a, b
ADD t1, c, d
SUB f, t0, t1

      

(3) g = h + A[8];

LDUR X9, [X22, #64]   
//64=8*8이므로, X22의 값에 64byte 더한 값을 주소로 하여 그 주소의 값을 X9에 로드하라
ADD X21, X9, X20
STUR X9, [X22, #96]
ADDI X9, X20, #4

    

(4) 4bit를 8bit로 확장하기
총 4개의 bit를 추가해야 한다. signed 부호일 경우 최상위 비트가 0 이면 그 앞에 4개의 0을, 1이면 그 앞에 4개의 1을 붙여준다. unsigned 부호일 경우 최상위 비트가 0이거나 1이거나 상관없이 4개의 0을 붙여준다. 

     

(5) 5개의 논리 연산 명령어
왼쪽으로 shift, 오른쪽으로 shift, bitAND, bitOR, bitNOT 총 5개의 논리 연산 명령어가 존재한다. LSL X9, X10, #2는 X10의 값을 left로 2bit 이동한 후 X9에 저장하라는 명령어다. 참고로 00001101을 왼쪽으로 2bit shift하면 00110100이다. LSR X9, X10, #3은 X10 값을 right로 3bit 이동한 후 이하동문의 명령어다. AND X9, X10, X11은 각각 bit별로 AND연산을 한 후에 X9에 저장하라는 명령어다. ANDI X9, X10, #?는 I type의, 동일한 의미를 가지는 명령어다. ORR X9, X10, X11ORRI X9, X10, #? 역시 bit별로 OR연산을 시행한 후 X9에 저장하면 된다. EOR X9, X10, X11EORI X9, X10, #?도 마찬가지로 XOR연산을 한다.
또한 EOR을 이용하여 not연산을 시행할 수도 있다. 0과 value를 xor하면 항상 value가 답으로 나온다. 1과 value를 xor하면 항상 value의 역이 답으로 나온다. 즉 EOR X9, X10, 111...111는 not 연산을 시행한 후에 X9에 저장하라는 명령어다. 
 
 
4. 명령어 type
(1) R type
register 끼리 연산하여, register에 저장한다. 아래에서 Shamt는 shift amount로, 몇 bit shift할 것인가를 의미한다. 2개의 명령어를 제외한 모든 R type 명령어들은 shamt = 0이다. 

예시) ADD X9, X10, X11

        

(2) D type

예시에서 #3이므로 28 - 8 = 25 이다. 즉 X10 +- 25 만큼만 접근 및 저장이 가능하다. 

예시) LDUR X9, [X10, #3]

        

(3) I type
8085 모델의 2byte 명령어와 비슷하다. 

예시) ADDI X9, X10, #2

    

(4) CB type
zero냐 아니냐로만 갈라지는 type이다. 8085 모델의 JZ, JNZ와 같은 의미의 명령어를 사용한다. CBZ는 Zero일 경우 해당 register로 이동, CBNZ는 nonzero일 경우 해당 register로 이동하라는 명령어다. 일반적으로 CBNZ를 더 많이 사용한다. 

CB type은 베이스 주소가 없다. 단지 218가 있다면 메모리에서 아래 위로 218 byte까지 접근 가능, 즉 216개의 명령어에 접근이 가능하다. 따라서 기본 주소(베이스 주소)를 현재 PC로 둔다. 

예시) CBZ X9, #8

   

아래 C언어 명령어를 보고, 프로그램 코드를 짜보면 다음과 같다. 

  SUB X9, X22, X23   //CBNZ나 CBZ나 코드의 전체 문법은 동일하다. 
  CBNZ X9, *
  ADD X19, X20, X21
  B **

* SUB X19, X20, X21
**

  SUB X9, X22, X23
  CBZ X9, *
  ADD X19, X20, X21
  B **

* SUB X19, X20, X21
**

     

(5) B type
최대한 많이 이동하기 위해 주소에 최대한 많은 bit를 할당했다. 

 
 
5. 조건부 branch
우선, Flag의 구조를 알아보자. Flag는 아래 그림과 같이 구성된다. N은 양수면 0, 음수면 1이다. Z는 zero면 1, nonzero면 0이다. C는 carry나 borrow가 생기면 1이다. V는 overflow가 생기면 1이다. 

overflow와 carry를 구별하는 방법은 간단하다. 최상위 비트에서 한 자리가 올라가면 carry는 무조건 1이다. 결과값을 한정된 비트 내에서 표현이 불가능하다면 overflow는 1이다. 즉 '내가 가질 수 있는 크기'에서 벗어나면 overflow는 1이다. 참고로, unsigned에서는 overflow, carry가 둘 다 발생한다. signed에서는 carry만 나온다. (ARM 구조에서는 unsigned와 signed의 경우를 각기 다른 케이스로 여긴다.)

     

(1) 조건부 명령어의 종류

크기 비교에서는 (A - B) 값을 비교한다.

 

조건부 명령어가 들어가면 control unit이 해석하여 맞는 값을 고른다. AND, OR는 무난히 실행되는 반면 뺄셈은 bit별 반전이 수행되어야 하므로 ~B가 들어간다. 뺄셈은 A + (~B)라고 생각하면 된다. 

   

(2) 조건부 명령어 유도
각각 signed의 경우와 unsigned의 경우이다. FIGURE 2.10.의 cc test가 성립함을 알 수 있다. 

  NVQZ
앞이 더 크다.(양수) - (작은양수)0010
앞이 더 작다.(양수) - (큰양수)1000
앞이 더 크다.(양수) - (작은음수)0000
앞이 더 크다. (양수) - (큰음수)1100
앞이 더 작다. (음수) - (작은양수)1010
앞이 더 작다.(음수) - (큰양수)0110
앞이 더 크다.(음수) - (작은음수)1000
앞이 더 작다. (음수) - (큰음수)0010
앞뒤 값이 같다.(양수) - (양수)00 1

* signed의 경우, 비교할 때 C(carry)의 값은 알 필요가 없다. 

  NVQZ
앞이 더 크다.(양수) - (작은양수)0010
앞이 더 작다.(양수) - (큰양수)1100
앞뒤 값이 같다. (양수) - (양수)0011

* unsigned의 경우.
 
 
6. 명령어 예제 풀기
이후의 내용들은 pdf 파일로 올려둡니다 ~~

마프 필기(기말).pdf
5.46MB


 
 
 
 
?) unsigned이면, MSB=0인 애가 더 클까?? MSB=1인 애가 더 클까?? ------> 1인 애가 더 큼. signed는 0인 애가 더 큼.
 
 
 
 
 
 

728x90
반응형