데이터 기초

어셈블러(asembler) : =번역기.
비트(bit - binary digit) : 0 또는 1의 두가지 값만 가질 수 있는 측정 단위
바이트(Byte) : 여덟개의 비트로 구성된 데이터의 양을 나타내는 단위

  • 음수를 나타낼 때는 2의 보수를 사용함
  • 0x를 붙인 16진수를 유용하게 사용함

8 bit = 1 byte
16 bit = 2 byte = 1 word
32 bit = 4 byte = 2 word = 1 dword(double-word)
64 bit = 8 byte = 4 word = 1 qword(quad-word)


레지스터 기초

레지스터 : 데이터를 임시적으로 저장하는 역할
CPU 내에 있기 때문에 거리가 짧아 처리속도가 매우 빠름

  • rax = 64비트 / eax = 32비트 / ax = 16비트 / ah, al = 8비트
  • mov 레지스터명, 값 : 레지스터에 값을 저장
  • mov 레지스터1, 레지스터2 : 레지스터2에 저장되어있는 값을 레지스터1에 저장

변수와 레지스터

data 영역에는 초기화 된 데이터를 사용

  • [변수이름] [크기] [초기값]
  • ex) a db 0x11, c dd 0x33333333
  • db = 1, dw = 2, dd = 4, dq = 8 (바이트기준)

bss 영역에는 초기화되지 않은 데이터를 사용

  • [변수이름] [크기] [개수]
  • ex) e resb 10, f resq 64
  • resb = 1, resw = 2, resd = 4, resq = 8 (바이트기준)

data영역과 bss영역이 나뉘어져있는 이유 : 초기화되지 않은 변수는 초기값을 저장할 필요가 없으므로 실행파일의 크기가 작아짐

mov 레지스터 변수명으로 사용시 변수의 주소값이 레지스터에 저장됨
mov 레지스터, [변수명]으로 사용시 변수 자체의 값이 레지스터에 저장됨

  • 단, 크기를 지정하지 않았을시 설정한 레지스터와 같은 크기만큼 읽어들임
  • 원하는 크기만큼 읽고싶을 때는 레지스터 크기를 조절하는 방법을 사용할 수 있음

move [변수명], 크기지정 값 또는 move [변수명], 레지스터명으로 변수에 값을 지정할 수 있음
ex) mov [a], byte 0x55, mov [a], word 0x6666, `mov [a], cl