0-4. 변수와 레지스터

Crat3 ㅣ 2023. 4. 27. 18:25

1. 변수

데이터를 저장하는 바구니

- 변수 사용 선언

이름과 크기를 지정함.

 

(1) 초기화 된 데이터(data 섹션)

[변수이름] [크기] [초기값]

[크기] : db(1) dw(2) dd(4) dq(8)

(byte, word, dword, qword)

 

(2) 초기화 되지 않은 데이터(bss 섹션)

[변수이름] [크기] [개수]

[크기] : resb(1) resw(2) resd(4) resq(8)

-> 모든 값이 0으로 초기화 되어 있음 -> 실행파일의 크기를 줄일 수 있음.

 

2. 메모리와 레지스터

- 메모리의 주소 값을 저장

mov rax, a
; a(메모리)의 주소 값을 rax(레지스터)에 저장

각 메모리에는 주소가 있음.

변수 'a'의 메모리 주소는 0x403010

변수 'b'의 메모리 주소는 'a'의 주소에 1바이트를 더하면 됨 -> 0x403011

 

- 메모리에 저장된 데이터를 저장

mov rax, [a]
; a(메모리)의 데이터 값을 rax(레지스터)에 저장(데이터를 8바이트만큼 가져옴)

rax 안에 변수 'a'의 값을 저장하기 위해서는 위의 명령어 처럼 사용한다.

 

- 변수에 상수를 저장할 때

mov [a], byte 0x55
mov [a], word 0x6666
mov [a], dword 0x77777777
mov [a], cl ; cl에 저장된 값을 변수 'a'에 저장함

상수 왼쪽에 데이터 형식을 지정해준다.

변수의 크기를 넘으면 다른 변수의 데이터 영역을 침범해서 덮어씌움.

'어셈블리' 카테고리의 다른 글

0-6. 사칙연산  (0) 2023.04.27
0-5. 문자와 엔디안  (0) 2023.04.27
0-3. 레지스터 기초  (0) 2023.04.26
0-2. 데이터 기초  (0) 2023.04.26
0-1. SASM 기본 설정 및 어셈블리어  (0) 2023.04.26