🙇‍♀️레지스터 기초

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)

🪐레지스터 기초

  • 레지스터를 사용하는 이유
    • 하드 디스크까지는 멀고 레지스터는 내장되어 있으므로 매우 빠름
    • 연산 결과물을 임시적으로 저장하기 위해서
    • 시피유와 레지스터는 단짝 느낌
  • 레지스터 rax
    • EAX EBX ECX EDX를 중점적으로 사용하게 될거임
    • RAX는 64bit를 모두 사용, EAX는 32bit, AX는 ah와 al이 각각 8bit씩 사용

mov는 move의 약자로 데이터를 이동시킨다는 뜻

mov reg1, cst
mov reg1, reg2

mov eax, 0x1234
mov rbx, 0x12345678
mov cl, 0xff

mov al, 0x00
// al은 8bit만 00으로 밀어주고 그 상위 비트는 영향을 주지 않는다
mov rax, rdx
// rdx의 값을 rax에 복사한다

🪐변수와 레지스터

  • 메모리 <-> 레지스터

mov rax, a -> a의 값을 가져오는게 아니라 a의 주소값을 가져온다

mov rax, [a] -> a라는 바구니 안에 있는 값을 rax에다 복사

mov al, [a] -> 1바이트만 이동

mov [a], byte 0x55

mov [a], word 0x6666

mov [a], cl -> cl 자체가 1바이트를 가져오는 것이므로 크기 지정을 안해도

  • 메모리에는 구분할 수 있도록 주소(번지수)가 있다

  • section .data

    • 초기화 된 데이터
    • [변수이름] [크기] [초기값]
    • [크기] db(1) dw(2) dd(4) dq(8)
a db 0x11   ; [0x11]
b dw 0x2222
c dd 0x33333333
d dq 0x4444444444444444
  • section .bss
    • 초기화 되지 않은 데이터
    • [변수이름] [크기] [개수]
    • [크기] resb(1) resw(2) resd(4) resq(8)
    • 처음에 모든 값들이 0으로 되어있다
    • 실행파일의 메모리가 줄어든다

e resb 10

🪐엔디안

빅 리틀 엔디안

  • 대부분 리틀 엔디안을 사용함

  • 장단점이 교차한다

    • 빅 엔디언 : 숫자 비교에 유리
    • 리틀 엔티언 : 캐스팅에 유리하다

태그:

카테고리:

업데이트: