Operating System

[System Software] C언어&어셈블리 예제

Sara.H 2021. 2. 7. 22:01

7강) MIPS Instruction Set Architecture VI - C언어와 MIPS 어셈블리언어

- 배열의 경우 시작주소를 레지스터에 저장한다.

- 시작 위치로부터 얼마나 떨어져 있는지 인덱스 i 를 보고 계산한다. 정수 배열의 경우 요소 요소 마다 4byte 씩 공간을 차지하게 되므로   i 에다가 4를 곱한 주소에 배열 시작 주소를 더한 곳으로 접근한다.

- 곱하기 4를 하는 과정 : 곱하기보다 더하기가 더 빠르므로 똑똑한 컴파일러는 곱하기 4를 하는 과정을 add 연산으로 대체한다. 따라서 처음에 루프가 시작되는 곳을 보면, t1 에다가 s3 를 두 번 더하고, t1 에다가 다시 t1 끼리 더한 값을 저장한다. 그리고 마지막으로 s6, 즉 배열의 시작 주소를 더해준다.

- t0 라는 레지스터에 메모리에서 불러온 워드를 load 하고 Branch Not Equal 연산을 통해서 비교를 해준다.

- 만약 탈출 조건이 성립하지 않았다면  Loop 표시로 다시 jump 연산을 진행한다.

 

다음 주 정리할 내용들 :

(3.1) Procedure Call in MIPS I - 프로그램의 메모리 주소공간 구조
(3.2) Procedure Call in MIPS II (1)
(3.2) Procedure Call in MIPS II (2)
(4) System Software & Program Execution - 고급언어, 컴파일러, 링커, 로더, 어셈블러, 라이브러리 (1)
(4) System Software & Program Execution - 고급언어, 컴파일러, 링커, 로더, 어셈블러, 라이브러리 (2)