Programming Language/Assembly

메모리와 변수

D4tai1 2018. 7. 14.

1. 메모리 내의 변수

- 어셈블리어에서 메모리를 사용할 때 메모리 크기를 결정해야하고, 사용할 메모리의 위치를 결정해야함

- 코드 작성 시 사용할 메모리의 크기는 프로그래머가 결정

- 메모리에서 사용할 주소의 위치는 어셈블러가 바이너리로 변경될 때 결정

 

2. segment .bss

- 초기화되지 않은 변수를 선언하는 블록

- RESx 로 표현, x에는 저장될 데이터 크기를 지정

- 1byte[b], 2byte[w], 4byte[d], 8byte[q], 10byte

 

segment .bss                                ; 메모리상에 초기화되지 않은 변수를 저장할 공간

[변수이름] [데이터 크기] [개수]    ; 형식

test         resd            10         ; 4btye짜리 10개만큼 공간 확보, C언어에서는 int test[10]; 로 표현

 

3. segment .data

- 초기값이 정해진 변수를 선언하는 블록

- Dx 로 표현, x에는 저장될 데이터 크기를 지정

- 1byte[b], 2byte[w], 4byte[d], 8byte[q]

segment .data

[변수이름] [데이터크기] [초기화 값]

test         dw             0x100       ; 2byte만큼 공간 확보 후 10진수 256 저장

     ; C언어에서는 short test 256;

 

4. 리틀엔디안

- 인텔계열 컴퓨터에서 메모리구조 

- 연산을 빠르게 수행하기 위해 사용

- 레지스터와 메모리 사이에서 1바이트씩 전송하며 반대로 저장

 

 segment .text

mov eax, 0x12345678    ; 16진수 12345678을 eax로 이동

mov [value], eax           ; eax의 값을 메모리 내 value의 변수의 주소의 값에 저장

 

segment .bss

value resd 1                ; C언어의 int value;

 

 

segment .text

mov eax, 0x12              ; 16진수 12을 eax로 이동

mov [second], ax           ; ax의 값을 메모리 내 second의 변수의 주소의 값에 저장

 

segment .bss

second resw 1                ; C언어의 short second

 

 

 

5.빅엔디안

- 레지스터의 값을 메모리에 그대로 저장 

- 메모리의 값을 레지스터에 그대로 저장

 

 

'Programming Language > Assembly' 카테고리의 다른 글

Linux System Call  (0) 2019.01.26
레지스터  (0) 2018.07.14
어셈블리어란?  (0) 2018.07.14

댓글