※ 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로 두칸씩 밀어주니 잘 출력이되는 모습이다!