Tuuna Computer Science

[Assembly] 포인터 이용하기 본문

Assembly

[Assembly] 포인터 이용하기

GuTTe 2018. 4. 23. 12:12
1 mov ax, [Data] ; 워드의 직접 메모리 주소 지정

2 mov ebx, Data ; ebx = & Data

3 mov ax, [ebx] ; ax = *ebx

간접적인주소지정은레지스터를포인터변수들처럼사용할수있게한다.
레지스 터가포인터로사용됨을알려주기위해서대괄호([])로묶어주어야한다.


AX가 워드를 보관하고 있기 때문에 3행은 EBX에 저장된 주소에서 시작되는 워 드 를 읽어 들이게 된다. 
만약AX대신AL을 이용한다면 오직 한 개의 바이트만 읽어 들이게 될 것이다.

 C 에서의 변수들과는 달리 레지스터들은 형(type) 이 없다는 사실 을명심해야한다.
EBX에무엇을 가리키냐는어떠한 명령이 사용되냐에 따라 완전히 달라진다.

심지어명령에의해서도EBX가포인터라는사실도정해진다.
만약EBX가 잘못사용되어도어셈블러는아무런오류를내놓지않는다.

그러나,프로그램은올바 르게 작동하지 않는다. 

이 때문에 어셈블리 프로그래밍은 고급 언어 프로그래밍 보다 훨씬오류가많게된다. 

모든32비트범용레지스터(EAX,EBX,EDX,EDX)와인덱스(ESI,EDI)레지스터 들은모두간접주소지정으로사용될수있다.
통상적으로16비트와8비트는사용될 수없다,
Comments