저급 언어를 알아야하는 이유
하드웨어와 밀접하게 맞닿아 있는 프로그램을 개발하는 임베디드 개발자, 게임 개발자, 정보 보안 분야 등의 개발자는 어셈블리어를 많이 사용한다. 이런 분야 개발자들에게는 어셈블리어를 읽으면 컴퓨터가 프로그램을 어떤 과정으로 실행하는지, 즉 프로그램이 어떤 절차로 작동하는지를 가장 근본적인 단계에서부터 하나하나 추적하고 관찰할 수 있다.
개발자들에게 어셈블리어란 '작성의 대상'일 뿐만 아니라 매우 중요한 '관찰의 대상'이기도 함.
=> 일반적으로 인터프리터 언어가 컴파일 언어보다 느림.
목적 파일 vs 실행 파일
목적파일
- 이미지로 이루어진 파일을 이미지 파일이라 부르고, 텍스트로 이루어진 파일을 텍스트 파일이라 부르듯
목적코드로 이루어진 파일- 목적코드가 실행 파일이 되기 위해서는 링킹이라는 작업이 필요
실행파일
- 실행 코드로 이루어진 파일
명령어는 연산코드와 오퍼랜드로 구성
오퍼랜드
연산 코드
- 오퍼랜드 필드에 메모리나 레지스터의 주소를 담는 이유 : 명령어의 길이 떄문
만약 하나의 명령어가 n비트로 구성되고, 그주 ㅇ연산 코드 필드가 m비트라고 가정하면, 가장 많은 공간을 하당할 수 있는 1-주소 명령어일지라도 n-m비트가 되고, 2, 3-주소 명령어는 더욱 크기가 작음.- 유효 주소 : 연산의 대상이 되는 데이터가 저장된 위치
오퍼랜드 필드에 데이터가 저장된 위치를 명시할 때 연산에 사용할 데이터 위치를 찾는 방법
주소 지정 방식 종류
1. 즉시 : 연산에 사용할 데이터 직접 명시
2. 직접 : 유효 주소를 직접 명시
3. 간접 : 유효 주소의 주소를 명시
4. 레지스터 : 레지스터를 직접 명시
5. 레지스터 간접 : 유효 주소를 저장한 레지스터를 명시
즉시 주소 지정 방식(Immediate Addressing) : 이 방식은 연산에 사용될 데이터를 명령어의 일부분으로 직접 명시하는 방식입니다.
예를 들어 'ADD 5'라는 명령어는 5를 현재 값에 더하라는 의미입니다.
직접 주소 지정 방식(Direct Addressing) : 이 방식은 메모리 주소를 직접 명시하여 그 주소에 있는 데이터를 사용하는 방식입니다.
예를 들어 'LOAD 1000'이라는 명령어는 메모리의 1000번지에 있는 데이터를 레지스터로 로드하라는 의미입니다.
간접 주소 지정 방식(Indirect Addressing) : 이 방식은 유효 주소의 주소를 명시하는 방식입니다.
즉, 명령어가 가리키는 메모리 위치에는 실제 데이터가 아니라 다른 메모리 위치의 주소가 저장되어 있습니다.
이 방식은 주로 데이터 구조의 동적 할당이나 배열, 포인터 등에 사용됩니다.
레지스터 주소 지정 방식(Register Addressing) : 이 방식은 CPU 내부의 레지스터를 직접 명시하여 그 레지스터에 있는 데이터를 사용하는 방식입니다.
이 방식은 메모리 접근 시간을 줄여 연산 속도를 빠르게 할 수 있습니다.
레지스터 간접 주소 지정 방식(Register Indirect Addressing) : 이 방식은 레지스터가 가리키는 메모리 위치의 데이터를 사용하는 방식입니다.
즉, 레지스터에 저장된 값이 실제 데이터의 메모리 주소를 가리킵니다. 이 방식 역시 데이터 구조의 동적 할당이나 배열, 포인터 등에 사용됩니다.