[1. 개요]
x86 은 인텔에서 개발한 cpu architecture 로,
쉽게 생각하면 데스크탑 및 랩탑에 들어가는 거의 모든 cpu architecture 를 말한다.
그리고 x86 assembly 는 기계어와 일대일로 대응되는 저급 프로그래밍언어로 이러한 아키텍처를 제어할 수 있다.
즉, x86 architecture 인 cpu 를 전부 직접 제어 할 수 있다.
여기서 기계어는 cpu 가 이해할 수 있는 0과 1로 이루어져있으며,
어셈블리는 이 기계어를 사람이 읽을 수 있게 표현해준다.
가령, 기계어 0000'0001'0001'0002 이 reg1 = reg1 + reg2 를 표현한다면,
어셈블리는 위 기계어를 ADD r1, r1, r2 로 표현한다.
[2. x86 assembly 문법]
x86 assembly 를 작성하기 위한 문법은 크게 두가지로
AT&T 문법과 Intel 문법이 있다.
두 문법에 대한 차이는 크게 4가지 정도가 있다.
- 파라미터 순서
- 파라미터 크기
- Sigils (인장)
- Effective addresses
자세한 사항은 아래 링크를 참조한다.
x86 assembly language - Wikipedia
[3. x86-64 register]
보통 cpu 는 다음과 같은 구조로 구성된다.
- Register
- ALU
- Cache memory
그래서 assembly 에서는 보통 regiser 와 메모리를 직접 제어 할 수 있다.
따라서 x86 이 제공하는 register 를 이해 할 필요가 있으며, 아래는 register list 이다.
여기서는 64bit 버전이다.
register를 구분하는 naming 은 다음과 같다.
Register
eXtended
Accumulator
Base
Counter
Data
Source Index
Destination Index
Base Pointer
Stack Pointer
Double word
Word
[word 는 cpu 가 한번에 처리할 수 있는 크기로, 32bit arch는 4bytes 가 되고 64bit arch는 8bytes 가 되는 것이 맞다.
다만 x86 이 과거 1970년대에 처음 만들어졌고, 이 시기에 1word는 2bytes 였다고 하니 일종의 관습이라 보는 것이 편할 듯 하다.
참조: https://stackoverflow.com/questions/32548409/weird-data-sizes]
High
Low / Byte
그밖에 program counter, segment register, status register ...
사용해보고 작성할 것.
'Assembly' 카테고리의 다른 글
x86 assembly data move instruction (0) | 2022.01.09 |
---|---|
x86 assembly code 구조 (0) | 2022.01.08 |
x86 assembly 디버깅 및 개발환경 구축 (0) | 2021.12.21 |
x86 assembly system call (0) | 2021.12.11 |