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

어셈블리 배열과 주소

season97 2024. 9. 15. 13:41

※ C / C++을 이미 알고 있으나 어셈블리에 대해 알고싶어 공부하는 것 이므로

기초 개념을 자세하게 포스팅 하고 있지 않습니다. 

 

▶ 배열

ㆍ 동일한 타입의 데이터 묶음 ,구성하는 겂을 요소, 위치를 가르키는 숫자를 인덱스 라고 함

 

▶ 어셈블리 실습

데이터 섹션

ㆍ 데이터 섹션에서 db 와 dw 데이터 a,b를 만들어보았다

ㆍ 디버그를 돌려 메모리를 확인해 보니 잘 들어가있다.

ㆍ b는 dw로 선언했으니 word로 바꿔서 보니 데이터가 눈으로 잘 확인이 된다. byte로 했을때 1 0 1 0 1 0 1 0 으로 1이

먼저 나오는 이유는 지난시간에 배웠던 엔디안이라는 개념 때문(리틀엔디안)

ㆍ 뒤에 값이 더 출력되는건 a뒤의 바로 뒤 메모리에 b가 있기 떄문에 출력되는것

 

 

 

 


 

※ 중요

 

ㆍ rax의 레지스터 값을 메모리에 올려서 보면 a가 출력되는걸 볼 수 있다

ㆍ 이 말은 즉 배열의 첫번째 주소를 주소값으로 표현하고 있다는 것으로 알 수 있다. (주소값은 매번 바뀜)

ㆍ a값을 출력하려면 [a]로 묶어주면 된다.

 

▶ 그렇다면 뒤에 있는 값들은 어떻게 추출해야할까?

 

실습

결과가 잘 나온다

 

하지만 b는.... dw다...

ㆍ 이상한 값이 출력된다. 리틀 엔디안이라 반대로 들어가는 개념 때문+ word니까 2칸씩 밀어야되는데 인덱스를 1칸씩 해서 생긴 문제이다

 

ㆍ C++같은 코드에선 알아서 처리해주지만 어셈블리에선 이 조차 직접 인덱스를 구성해줘야한다

 

수정된 코드

 

 

ㆍ 메모리를 ecx*2로 두칸씩 밀어주니 잘 출력이되는 모습이다!

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

어셈블리 함수 (프로시저)와 스택메모리  (0) 2024.09.15
어셈블리 반복문  (0) 2024.09.15
어셈블리 분기문  (1) 2024.09.15
어셈블리 논리연산  (0) 2024.09.15
쉬프트 연산  (0) 2024.09.15