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

0628 컴퓨터 구조 이론 (2) Assembly->Machine

천숭이 2022. 6. 28. 22:13

■ 명령어 필드 (32bit)

opcode Rm (src2) shamt(shift amount) Rn (src1) Rd (dst)

11bit                                    5bit                               6bit                                   5bit                                  5bit

 

 

■ SP (stack pointer)

- Last in First Out 구조

 

 

■ FP

 

■ C -> Assembly 예시

c 코드

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

변환된 Assembly 코드

SUB  X9, X22, X23   // x9 = i - j
CBNZ X9, Else       // go to else if i!=j (x9가 0인지 판단해보기 CBNZ)
ADD  X19, X20, X21  // f=g+h (if i==j)
B    Exit           // go to Exit
Else : SUB  X19, X20, X21  // f=g-h (i!=j 일때)
Exit : ...

 

 

■ 함수 호출될 때의 동작

1. main문에서 함수를 만나면 R[x28] 에 적혀있는 Mem 메모리 공간으로 가서 #만큼 공간을 확보해서 reg값을 save한다

2. Memory에서 sp - datatype * n 까지 스택구조로 쌓이면서 sp가 감소한다

3. x0~x7 사이에 저장된 매개변수를 바탕으로 연산을 해 지정된 레지스터에 저장

4. reg에 save했던 값들을 reg에 다시 restore한다

5. sp 주소 다시 복원한다

6. reg[x30] (link register) return address를 따라가서 함수 선언된 원래 위치다시 복귀