데이터 단위
bit
- 가장 작은 단위
- binary digit으로 하나의 bit는 0 또는 1의 값을 가질수 있다byte
- 8bit를 묶어서 1byte라고 부른다word
- 컴퓨터에서 연산의 기본단위가 되는 정보의 양
- 컴퓨터마다 1word의 단위가 달라진다
숫자의 표기법
10(10진수) and 0x0A(16진수)
10진수는 일반적으로 사용하는 것과 동일하게 사용되지만
16진수의 경우 0x가 16진수임을 알려준다
8bit는 0x00 처럼 2자리
16bit는 0x1234 처럼 4자리
32bit는 0x12345678 처럼 8자리 표현된다
어셈블리 프로그램 기본 구조
우리가 프로그램을 실행하면 프로그램의 명령어는 메모리(RAM)에 저장되어 있고
CPU는 메모리(RAM)에서 명령어를 1개씩 가져와서 명령을 해석하고 수행한다
이때 임시 작업 공간으로 레지스터를 사용한다
CPU 입장에서는 레지스터에서 데이터를 저장하고 읽어 오는 것이 메모리(RAM)에서 데이터를
저장하고 읽는것보다 훨씬 빠르고 쉽기 때문이다
레지스터
- 프로그래머가 알고리즘을 구현할 때 사용할 수 있는 특수한 변수
우선 시작은 작업용 레스터인 A, B, C, D의 이름을 가지고 있는 레지스터에서 출발하면
이러한 레지스터의 크기는 64bit 운영체제면 64bit
32bit 운영체제라면 32bit가 최대인 것이다
레지스터는 데이터를 다루는 크기에 따라 각각 이름이 다른데
A레지스터를 예로 보게 되면
- 64bit
- RAX
- 32bit
- EAX
- 16bit
- AX
- 8bit
- AH, AL
SASM에서 어셈블리 프로그램 구조
SASM에서 Create new project를 하게 되면
위와 같이 기본 코드가 등장하게 된다
1라인
- 운영체제에 무관한 입출력 매크로 함수를 지원하기 위한 SASM 제공 메타 함수가 코딩되어있다
3라인
- text section으로 실행되는 코드가 기술되어 있는 곳이다
- 8라인까지가 text section의 영역이다
4라인
- 프로그램이 시작되는 주소를 정의하는 곳이다
- 프로그램이 시작되면 5라인 즉 CMAIN 주소(라벨)부터 실행되게 된다
7~8라인
- 프로그램을 종료하고 운영체제로 제어를 돌려주는 코드
- C언어의 main문의 마지막에 return 0 과 같은 역할을 한다
SASM으로 코딩할 때 section .text 처럼 여러 이름의 section들이 나오게 되는데
이러한 section은 특정한 목적의 데이터나 명령어를 모아놓은 공통 블럭이라고 보면 된다
동일한 종류의 section을 2회 이상 사용하는 경우도 있다
정리하면 어셈블리 언어로 코딩하는 순서는 필요한 section들을 서언하고
각각의 목적에 적합하도록 section을 완성하는 것이라 할 수 있다
'컴퓨터구조,어셈블리어' 카테고리의 다른 글
Multicycle Implementation (0) | 2020.08.20 |
---|---|
Mips (1) (0) | 2020.08.20 |
Address mode (0) | 2020.08.20 |
Exception Handling (0) | 2020.05.26 |
어셈블리 개발 환경 구축 (0) | 2020.05.14 |