변수와 레지스터

초기화 된 데이터의 선언

문법 : [변수이름][크기][초기값]
크기 : db(1byte), dw(2bytes), dd(4bytes), dq(8bytes)

section .data
    a db 0x11  
    b dw 0x2222  
    c dd 0x33333333
    d dq 0x4444444444444444

위 데이터 선언 후 빌드시 메모리 정보

그림에서 보듯 변수 a,b,c,d는 연속해서 메모리 공간에 저장되어 있다.

초기화 되지 않은 데이터

문법 : [변수이름][크기][개수]
크기 : resb(1byte), resw(2bytes), resd(4bytes), resq(8bytes)

section .bss
    e resb 10

초기화 되지 않은 데이터는 파일사이즈에 영향을 주지 않는다. (파일사이즈 감소효과)

메모리/레지스터 간의 데이터 이동

mov rax, a  ;변수 a의 주소값을 rax에 복사
mov rax, [a]  ;변수 a의 값을 rax에 복사 
;별도 크기지정이 없어서 8바이트값이 들어감 (rax = 8bytes)
;0x4433333333222211 (메모리상의 a부터 연속된 8바이트에 저장된값)
mov al, [a]  ;al 1byte에 변수a값 복사
mov [a], byte 0x55  ;변수 a에 0x55 복사
mov [a], word 0x6666  ;변수 a에 0x6666을 복사 (변수 b메모리공간 침범)
mov [a], cl  ;cl레지스터의 값을 a에 복사 할수 있음

좋은 웹페이지 즐겨찾기