본문 바로가기

Assembly

x86 assembly 개요

[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가지 정도가 있다.

  1. 파라미터 순서
  2. 파라미터 크기
  3. Sigils (인장)
  4. Effective addresses

자세한 사항은 아래 링크를 참조한다.

x86 assembly language - Wikipedia

 

 

[3. x86-64 register]

보통 cpu 는 다음과 같은 구조로 구성된다.

  1. Register
  2. ALU
  3. Cache memory

그래서 assembly 에서는 보통 regiser 와 메모리를 직접 제어 할 수 있다.

따라서 x86 이 제공하는 register 를 이해 할 필요가 있으며, 아래는 register list 이다.

여기서는 64bit 버전이다.

https://tirkarp.medium.com/understanding-x86-assembly-5d7d637efb5

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