간접주소지정방식(Indirect Addressing Mode)에 관한 질문
Computer System Architecture 라는 책에서는
주소지정모드를 10가지로 구분하고 있습니다.
그중
*레지스터 모드(Register Mode)는
MOV AX,BX 처럼 레지스터값이 opprand값이 되는경우를 의미하고
*레지스터 간접 모드(Register Indirect Mode)는
MOV AX,[BX] 처럼 레지스터 값이 주소값으로 사용되는 겨우입니다.
*직접 주소 모드(Direct Address Mode)는
MOV AX,[1002H] 처럼 주소값이 직접 주어지는 경우이고
*간접 주소 모드(Indirect Address Mode)는
MOV AX,[1002H],I 처럼
opperand의 값을 주소값으로해서 해당위치에 최종값이 존재하는 방식입니다.
다시말해 직접주소모드에 비해서 메모리 참조가 1번 더 일어나게 됩니다.
이 4가지 중에서 간접주소모드가 헷갈립니다.
왜냐면..
IBM PC Assembly Language and Programming 이라는 책에서는
(직접주소지정은
MOV CX,DS:[38B0H] 이런식으로 위의 정의에 맞게 설명되어있습니다..
Immediate Addressing 이나 Register Addressing 등도 맞게 나와있습니다.)
하지만
간접주소지정은
MOV [BX],25
ADD CL,[BX] 이 예로 나와있습니다.
이는 위에 설명된 레지스터 간접 주소지정방식이 되는데요..
또한 프로그래밍 언어론이라는 책에서도
"스택동적 지역변수의 접근은 간접주소방식이다. 한편 정적 지역 변수의 접근은 직접주소 방식이다"
이렇게 설명하고 있습니다.
실제로 해당 어셈블리코드를 보면 스택동적 지역변수의 경우 레지스터 간접모드입니다.
또한..
#include<iostream> using namespace std; int a=10; int *b = &a; int **c = &b; int ***d = &c; int main() { cout << ***d; return 0; } 위 코드중 ***d 참조부분을 보면 00401558 mov eax,[d (00473dcc)] 0040155D mov ecx,dword ptr [eax] 0040155F mov edx,dword ptr [ecx] 00401561 mov eax,dword ptr [edx] 00401563 push eax 레지스터 간접주소지정만.. 3번을 하고 있습니다.
어셈블리어에서 간접주소지정모드에 해당하는 지시자 ",I" 가 있는것도 아니고 간접주소지정이
구현이 안되어있기 때문에..
레지스터간접주소지정방식을 간접주소지정방식으로 보는것인가요?
책에 나온 내용대로 레지스터간접주소지정방식과 간접주소지정방식을 구분하는것은 의미가 없는것인가요?
어떻게 결론을 내려야 할지 모르겠습니다.
설명부탁드립니다.
*직접 주소 모드(Direct Address Mode)는MOV AX,
*직접 주소 모드(Direct Address Mode)는
MOV AX,[1002H]
*간접 주소 모드(Indirect Address Mode)는
MOV BX,1002H
MOV AX,[BX]
즉 레지스터 간접 모드(Register Indirect Mode)와 같다라고 배웠습니다.^^
고작 블로킹 하나, 고작 25점 중에 1점, 고작 부활동
"만약 그 순간이 온다면 그때가 네가 배구에 빠지는 순간이야"
답변감사합니다.
그런데
예로드신..
MOV BX,1002H
이것은 즉시주소지정방식(Immediate addressing)
아닌가요?
댓글 달기