Link

인덱스 주소지정 방식 명령어를 사용할 때 주의할 점

Z80은 16비트 인덱스 레지스터 IX, IY를 제공한다. 인덱스 주소지정 방식(indexed addressing) 명령어를 사용할 때 IX, IY의 값은 베이스(base, 기준) 주소로 사용된다.

인덱스 주소지정의 사용예는 다음과 같다.

LD (IX+d), N

이때 N은 IX+d 번지에 저장될 즉시값이고, d는 IX에 저장된 베이스 주소에 더할 변위displacement(또는 오프셋offset) 값이다. 여기서 주의해야 할 점은 d의 값이 8비트 부호 있는 정수(-128~+127)로 제한된다는 것이다.

​인덱스 주소지정 방식 명령어를 사용할 때는 변위값의 범위에 주의해서 프로그래밍 해야 한다. 비슷하게 상대주소지정 방식(relative addressing)의 명령어를 사용할 때도 변위값의 범위에 주의해야 하는데, 상대주소는 상대 점프 명령어인 JR에서 사용된다.

상대주소는 현재 PC(프로그램 카운터)의 값에서 상대적으로 점프할 명령어의 주소값이고, 이 상대값 역시 8비트 부호 있는 정수 범위로 제한(그래서 근접점프라고도 한다)되기 때문에 분기 명령어를 사용할 때는 이 점을 염두에 둘 필요가 있다. 특히 인덱스 주소지정과 다르게 상대주소는 프로그래머가 아니라 어셈블러가 계산하기 때문에 분기 명령어와 점프할 주소 사이의 거리를 고려하며 프로그래밍 해야 한다.