■ 명령어 필드 (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를 따라가서 함수 선언된 원래 위치다시 복귀
'FW 심화 과정 > [1] HDL, ARM프로세서설계' 카테고리의 다른 글
0629 ARMV8기반 싱글 프로세서 원리 (0) | 2022.06.29 |
---|---|
Instruction Format (0) | 2022.06.28 |
0627 컴퓨터 구조 이론 (1) High lang -> Assembly (0) | 2022.06.27 |
0624 FPGA 실습 (4차실습) (0) | 2022.06.25 |
0623 { 게이트, 데이터플로우, 동작적행위 }모델링 (0) | 2022.06.23 |
0623 실습 3-1~3-3 (0) | 2022.06.23 |