이제 본격적으로 어셈블리 코드를 다뤄보겠습니다. 우선 기초 문법 먼저 살펴볼까요?
말씀드렸다시피, 여러분 생각보다 컴퓨터는... 훨씬.. 무식합니다. 당장의 뉴로사마를 보아도, D&D 실황에서 주사위를 굴리지 못해 누군가 대신 굴려주지 않습니까?(...) 그리고 무엇보다, 빨라야합니다. 우리가 어셈블리코드까지 뜯는다 함은, 고수준에서의 꼬임이 곧 입대할 제 지인의 군생활 만큼 꼬여있거나, 아니면 상당한 속도 향상을 위해 뜯어보는 걸텐데.. 간단명료하고 빠르지 않다면 아무 의미 없지 않겠습니까? 따라서, 어떠한 고정된 형태로, 최대한 간결하게, 그래서 삼척동자 컴퓨터가 전달받아도 매우 빠르게 처리할 수 있도록 세팅되어야 합니다. 이는 저희에게도 상당한 이점입니다. 간결하게 키워드만 딱 딱 있으니까, '트이기만 한다면' 바로바로 해석할 수 있게되죠. 요약하는 방식도 간단합니다. 눈마새의 갈바마리 화법을 생각하면 편한데, "나가 태운 대호! 대호 태운 나가! 나가 태운 대호! 대호 태운 나가!" 이정도 수준입니다. 와 어셈블리어! 두억시니도 읽을 수 있다!

오퍼랜드
본격적을 오퍼랜드 설명에 들어가겠습니다. 이전에 설명한 내용이지만, 대부분의 인스트럭션은 하나 이상의 오퍼랜드를 가집니다. 그냥 특정 명령어가 아닌 이상에야, 주체든 대상이든 존재해야 하니, 어찌보면 당연한 말입니다. 이를 도서에선, 연산을 수행할 소스(source)값과 그 결과를 저장할 목적지(destination)를 명시한다고 합니다. 이것은 오퍼랜드의 역할입니다. 그럼 오퍼랜드의 형태는 어떨까요?
오퍼랜드의 형태는 크게 세가지로 나눌 수 있습니다. 그래봐야, 위의 역할을 위해 존재하는 것이니, 상이한 것은 아닙니다. 먼저 상수값입니다. 사실 이전 포스팅에서 보여드린 부분인데, 예를 들어 스택 포인터를 한 단위 만큼(8바이트) 감소시킨다 하면, 8만큼 증가시키는 명령어가 입력되어야 합니다. 따라서 add 같은 명령어에 $8이 붙습니다. 이를 역으로 살펴본다면, 이 상수값으로 사용되는 오퍼랜드는 $ 표시를 통해 해당 소스가 상수임을 명시합니다. 상수값이니 당연히 목적지가 될 순 없습니다. 주소가 아니니까요. 상수값은 영어로 immediate입니다. 그래서 어떤 오퍼랜드를 정의할 때, 상수값은 Imm 으로 명시합니다.
다음은 레지스터에서 가져오는 형태입니다. 이전에 이야기했던 %rbp, %rsp, %rdi... 등등이 이에 해당합니다. 특정 레지스터를 명시할 수 있는 명칭과 함께, 앞에는 % 기호로 구분합니다. 이는, 레지스터 집합 R 중, 특정 레지스터 ra를 사용한다 하여 오퍼랜드 정의 시, R[ra]로 명시합니다.
마지막으로 메모리에서 참조해오는 형태입니다. 유효주소(effective address)라 하는, 계산된 주소를 통해 메모리 위치로 접근할 수 있는 형식입니다. 레지스터의 경우, 물론 결과적으론 주소값을 얻을 수 있지만, 이는 레지스터에 저장된 값에서 가져온 것이지, 처음 오퍼랜드가 구성된 인스트럭션에선 해당 주소를 알 수 없었다면, 이번엔 주소 그 자체를 의미하는 형태라 할 수 있습니다. 이 또한 메모리라는 매우 거대한 배열에서, 특정 조각을 가져온 것이라 할 수 있으니, 주소 Addr부터 b 바이트 만큼 참조한다를 Mb[Addr]로 명시합니다.
추가적으로 아래 그림을 봤을 때, 특정 s가 곱해지는 것을 확인할 수 있고, 그것이 가장 마지막에 있는 오퍼랜드에만 곱해짐을 확인 할 수 있습니다. 특정 범위를 정의할 때, 그 바이트 단위를 맞추기 위해, 단위 크기 s를 정의하고, 이를 크기만큼 곱하여, 알맞는 이동값을 도출하기 위함입니다.

포스팅 수가 많아질 것 같아 우려스럽지만.. 인스트럭션 종류가 많다 보니, 구별하여 작성하는게 좋을 것 같아, 파트를 나누려 합니다. 이후 포스팅부턴, 본격적으로 인스트럭션을 종류별로 설명하겠습니다!
'CS' 카테고리의 다른 글
| [CSAPP] 3챕터 - 프로그램의 기계수준 표현(6) - 산술 연산 인스트럭션 (0) | 2025.09.10 |
|---|---|
| [CSAPP] 3챕터 - 프로그램의 기계수준 표현(5) - 데이터 이동 인스트럭션 (1) | 2025.09.09 |
| [CSAPP] 3챕터 - 프로그램의 기계수준 표현(3) - 스택 프레임 규칙 (0) | 2025.09.02 |
| [CSAPP] 3챕터 - 프로그램의 기계수준 표현(2) - 레지스터의 종류 (2) | 2025.08.10 |
| [CSAPP] 3챕터 - 프로그램의 기계수준 표현(1) - 인스트럭션 셋 아키텍처(ISA) (5) | 2025.07.30 |