C++프로그래밍/어셈블리 언어

변수와 레지스터

season97 2024. 9. 14. 17:00

 

 

레지스터의 section

데이터 섹션

ㆍ데이터 섹션은 초기화 된 데이터

 

◆ 선언 방법

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

ㆍ  크기 키워드의 종류 : db(1) dw(2) dd(4) dq(8) 디파인바이트, 디파인워드 ,디파인 디워드 디파인 q워드

ㆍ  순서대로 d바이트 d워드 d더블 d쿼터

 

 

bss섹션

ㆍ bss섹션은 초기화 되지 않은 데이터

 

◆ 선언 방법

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

ㆍ 크기 키워드 종류 - resb(1) resw(2) resd(4) resq(8)

 

 

 

윈도우 실행파일 구조

ㆍ 위 사진은 윈도우 실행파일 구조이다

 

ㆍ 노출되는건 Data영역일뿐 Bss는 노출되지 않는다

 

ㆍ 하지만 어셈블리에선 두 영역을 분리하고있다. 차이점이 뭐길레?

 

메모리 구조

ㆍ 실제 메모리의 구조에선 BSS가 눈에 보인다

 

 

▶결과창과 함께 보는 data와 bss 차이

메모리에 들어가 있는 a b c d

Data : 프로그램 실행 시 data영역의 변수들은 초기값이 메모리에 할당되는걸 확인할 수 있다 . 

 

Bss : bss영역은 초기화 되지 않은 변수를 자동으로 0으로 초기화 하고 실제 메모리에 저장되지 않는다.

 

 

 


 

 

 

 

▶ rax에 a의 주소와 a의 값 복사

주소 복사

ㆍ 지난 글에 mov를 알아봤는데 값을 가져오는 것이 아닌 주소값을 가져오는 것

값 복사
[a]에 상수넣기

ㆍ 이러한 방식도 가능하다..

 

 

 

 

▶ 결론

정말 너무 헷갈리는데... 디버그를 돌려보면서 공부하면 이해가 되는 것 같다.

 

※ 디버그를 돌리는 방법

SASM 프로그램

 

1. Debug를 실행시킨다 (중단점 다 됨)

 

2. 위 사진의 체크박스를 활성화 시킨다.

Memory부분 레이아웃

ㆍ Variable or expression 탭에서 만든 변수를 추가하고 Type탭에서 몇진수로, 무슨 단위로(bit,byte,word,dw...등등) 설정하면 여러가지를 눈으로 확인할 수 있다!

 

 

 

 

 

 

※ 접은 글은 개인적으로 이것저것 필기해보고 확인해보다 지우기전에 저장용도로 첨부함

더보기
지우기전 첨부 1

 

지우기전 첨부2

 

 

'C++프로그래밍 > 어셈블리 언어' 카테고리의 다른 글

어셈블리 논리연산  (0) 2024.09.15
쉬프트 연산  (0) 2024.09.15
문자와 엔디안  (0) 2024.09.14
레지스터 기초  (0) 2024.09.14
데이터 기초 (숫자를 담는 크기)  (0) 2024.09.14