메모리와 변수
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 |
댓글