어셈블리어의 주소 지정 방식
※ 어셈블리 명령어의 구성
L1 : |
mov |
%eax , |
%ebx |
;comment |
Label |
작동 코드 |
제 1 오퍼랜드 |
제 2 오퍼랜드 |
설명문 |
※ 주소 지정 방식의 이해
$1. 레지스터 주소 지정 : 레지스터의 주소 값을 직접 지정 복사, 처리 속도 가장 빠름
MOV EDX, EAX => EAX 레지스터의 내용을 EDX레지스터로 복사 |
$2. 직접 메모리 주소 지정 : 가장 일반적인 주소 지정 방식
보통 피연산자 하나가 메모리 위치를 참조하고 다른 하나는 레지스터를 참조.
(예) DS:[8088h]와 DS:[1234h]는 각각 ‘세그멘트:오프셋’ 형식의 메모리에 직접 접근하는 방식
MOV AL, DS:[8080h] MOV DS:[1234h], DL |
$3. 레지스터 간접 주소 지정 : '세그먼트 : 오프셋' 형식을 사용
MOV AL, [BX] -> [BX] -> DS:[BX] MOV AL, [BP] -> [BP] -> SS:[BP] |
$4. 인덱스 주소 지정 : 레지스터 간접 지정 방식에 변위가 더해진 메모리 주소 지정 방식
(예)20h만큼 더해 메모리를 참조한 명령
MOV AL, [BX+20h] -> DS:[BX+20h] MOV AL, [BP+20h] -> SS:[BP+20h] |
$5. 베이스 인덱스 주소 지정
: 실제 주소 생성 위해 베이스 레지스터(BX 또는 BP)와 인덱스 레지스터(DI 또는 SI)를 결합.
2차원 배열의 주소 지정에 사용
MOV AL, [BX+SI] -> DS:[BX+SI] MOV AL, [BP+SI] -> SS:[BP+SI] |
$6. 변위를 갖는 베이스 인덱스 주소 지정
베이스-인덱스의 변형으로 실제 주소 생성 위해 베이스 레지스터, 인덱스 레지스터, 변위 결합
MOV AL, [BX+SI+20h] MOV AL, [BP+SI+20h] |