Dev fox
SASM 어셈블리언어 (2) 본문
메모리와 레지스터의 값 주소 확인
메모리 < > 레지스터 값의 연관성?을 확인하는 과정
section .data
- 초기화 된 데이터
- [변수이름] [크기] [초기값]
- [크기] db(1byte) dw(2byte) dd(4byte) dq(8byte)
section .bss
- 초기화 되지 않는 데이터
- [변수이름] [크기] [개수]
- [크기] resb(1) resw(2) resd(4) resq(8)
- data와 bss의 차이는 초기화 되는지 여부인데 bss를 사용하면 용량을 줄일 수 있음..
레지스트 -> 메모리
.data에 변수를 선언하고
해당 데이터를 레지스터에 옮기며 해본 결과
mov rax, a(.data에서 선언한 값)를 쓰면 변수 a의 주소값을 rax에 복사하는것에 불과함
SASM에서 테스트 해본결과 registers내 rax값에 선언한 값과는 달리 주소값이 들어있는걸 확인할 수 있음
mov rax, [a]를 쓰면 rax에 a의 값이 복사됨.. 하지만 선언한 크기를 넘어서 rax의 크기만큼 복사해옴..
ex) a db 0x11을 선언한 경우 mov rax, [a]를 쓰면 0x11만이 아닌 rax크기의 옆에있는 값들까지 가져가는걸로 보임
위에서 선언한 0x11의 만큼만 가져가려면
mov al, [a] 처럼 al만큼의 크기 지정이 필요함
메모리에 상수넣기
mov [a], 0x55 에러남.. 크기 지정필요
mov [a], byte 0x55로 크기지정시 에러x (byte를 word, cl등 범우를 지정해 상수를 넣을 수 있음)
메모리에 올라간 값들은 모두 주소값을 가지고있음..**
인프런 강의
[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] 참고
'C++' 카테고리의 다른 글
C++ 열거형 (0) | 2023.07.03 |
---|---|
C++ 유의사항 1) (0) | 2023.06.21 |
레지스터 이해하기 (1) (0) | 2023.04.14 |
SASM 어셈블리언어 (1) (0) | 2023.04.12 |
C++ 프로그래밍 입문 (0) | 2023.04.12 |