*변수의 선언 & 사용
=> 데이터를 저장하는 바구니.
=> 처음 바구니 사용하겠다 선언 => 이름 , 크기 지정
*어셈블리 데이터 선언 방식
*초기화된 데이터 ( section .data )
[변수이름] [크기] [초기값]
[크기] db ( 1 ) / dw ( 2 ) / dd ( 4 ) / dq ( 8 )
a dd 0
a dw 0
a dd 0
a dq 0
*초기화 되지 않은 데이터 ( section .bss )
[변수이름] [크기] [개수]
[크기] resb ( 1 ) / resw ( 2 ) / resd ( 4 ) / resq ( 8 )
num resb 10
section .data
msg db 'Hello World', 0x00
a db 0x01,
section .bss
num resb 1
BSS : 초기화되지 않은 전역, 정적 변수
Data : 초기화한 전역, 정적 변수
*왜 Data 영역과 BSS 영역은 구분되어있을까 ??
=> '초기화' 되었냐 되지 않았냐 의 차이
=> 실행파일의 크기가 줄어들게 됨. => 초기화 되지 않았기 때문
=> 아주 오래전에는 메모리 비용이 비쌌기 때문에 최대한 파일 크기를 줄이려는 노력.
*메모리 <-> 레지스터, 두 곳 사이를 이동하는 방법 ??
1. mov [a], dword 0x13
2. mov rax, a
1. [ a ] ( a의 값에 ), mov (이동해라.) , dword 0x13 ( dword 의 크기만큼 0x13 이란 값으로. )
a 에는 dword 의 크기이므로, 0x00000013 이 들어가있음.
그림에서, 0x13, 0x0, 0x0, 0x0 으로 들어가 있는걸 볼 수 있음.
그 이후에 있는 데이터들은 레지스터에 값을 이리저리 저장하고 이동하다보니 생긴
쓰레기값이라 생각하면 됨.
2. rax ( rx 만큼 a 레지스터에 ), mov ( 이동해라. ) , a ( a 의 주소를 )
a : 주소를 나타냄.
[a] : 해당 주소에 있는 값을 나타냄.
*메모리값 -> 레지스터
mov cl, [a]
*레지스터값 -> 메모리
mov [a], cl
본 내용은 인프런의 루키스님 강의를 듣고 정리한 내용입니다.
'프로그래밍 > C++' 카테고리의 다른 글
#6. 사칙연산 (0) | 2022.07.15 |
---|---|
#5. 문자와 엔디안 (0) | 2022.07.15 |
#3. 레지스터 (0) | 2022.07.14 |
#2. 데이터 기초 (0) | 2022.07.14 |
#1. Assembly SASM (0) | 2022.07.14 |