지난 포스팅에서는 SPARC 에서 사용하는 레지스터의 종류 4가지와,
레지스터 윈도우에 대하여 정리하였다.
이번에는 어셈블리 언어 프로그래밍의 기본 문법과
어셈블리 언어 명령어의 분류를 정리한다.
어셈블리 언어 기본 문법
- 각 줄의 코드는 명령어 또는 데이터 정의이다.
- 매 줄 끝마다 세미콜론은 사용하지 않는다.
- 콜론(:) 으로 끝나는 문자열을 '레이블' 이라고 한다.
이는 프로그램의 지표가 된다.
- /* */ 를 를 이용해 다중 라인 주석을 적거나
! 을 이용해 한 줄 주석을 적을 수 있다.
- 어셈블리 언어의 명령어는 크게 3가지로 나뉜다.
1. Pseudo-operation (의사 명령어)
2. Synthetic instruction (합성 명령어)
3. Machine instruction (기계 명령어)
아래는 SPARC 의 실제 코드이다.
1부터 10까지 합을 구하는 프로그램이다.
Pseudo-operation
의사 명령어 (수도 명령어) 는 말 그대로 '수도 코드' 같은 진짜 실행될 수 있는 명령어가 아니라
어셈블러에 전달되어 추가적인 정보를 제공하는 코드를 의미한다.
따라서 Pseudo-operation 은 기계어로 번역되지 않는다.
주로 . (온점) 으로 시작된다.
이런 코드가 예시가 된다.
.word 라는 코드도 있는데, word 가 4bytes 를 의미하므로,
Int 사이즈의 메모리 공간을 할당하는 명령어가 된다.
.word 7 이라고 하면 연속된 7개의 word 사이즈 메모리 공간을 확보하는 것이 되겠다.
또한 의사 명령어에는 상수를 선언하는 기능도 있다.
이런 코드도 의사코드이다.
앞으로 L 이라는 값이 보이면 어셈블시 10으로 바꿔서 어셈블한다는 의미이다.
상수 선언은 . (온점) 으로 시작하지 않으며,
상수 값의 정의는 기존 상수값과, 다른 상수값과의 연산으로도 정의할 수 있다.
단, 상수값이 아닌 값과의 연산으로는 정의할 수 없다.
VAL = 123 - %l0 과 같은 식은 안된다.
123은 상수이지만, %l0 과 같은 레지스터 주소값은 상수가 아니기 때문이다.
Machine Instruction
기계 명령어는 말 그대로 기계어로 1대1 번역이 가능한 명령어이다.
이 명령어들은 SPARC CPU 에서 직접 지원하는 명령어들이다.
Synthetic Instruction
합성 명령어는 SPARC CPU 에서 직접 지원하지는 않지만,
직접 지원하는 명령어들로 구성된 코드를 읽기 좋게 치환한 명령어로 보면 된다.
따라서 합성 명령어는 어셈블리에 의해 기계어로 변환될 수 있다.
clr, cmp 라는 명령어는 실제 기계어로 번역이 될 수 없는 명령어지만,
기계어로 번역될 수 있는 or, subcc 같은 명령어들로 변환되어 기계어로 바뀐다.
지금까지 SPARC 언어의 기본 문법과 명령어의 3가지 종류에 대해 정리하였다.
다음에는 SPARC 의 메모리와 gcc를 이용한 실습에 대해 정리해보겠다.
'CS > 어셈블리' 카테고리의 다른 글
[SPARC] 11. 산술 연산과 Condition Code (0) | 2023.10.05 |
---|---|
[SPARC] 10. SPARC에서 사용하는 메모리 종류 (0) | 2023.10.04 |
[SPARC] 8. SPARC Regsiter Window & Assembly Instruction Format (0) | 2023.09.27 |
[SPARC] 7. SPARC Architecture & Registers (0) | 2023.09.22 |
[SPARC] 6. Pipelining Hazard (2) | 2023.09.21 |