명령어집합 주소지정모드 (addressing mode)
내용 명령어는크게연산자부분과이연산에필요한주소부분으로구성 이때주소부분은다양한형태를해석될수있으며, 해석하는방법을주소지정방식 ( 모드 )(addressing mode) 라한다. 즉피연산자정보를구하는방법을주소지정방식이라고함 명령어형식
주소지정 명령어형식에있는주소필드는상대적으로짧다. 따라서지정할수있는위치가제한된다. 주소지정방법의종류 즉치 (immediate) 직접 (direct) 간접 (indirect) 레지스터 (register) 레지스터간접 (register indirect) 변위 (displacement) 스택 (stack) 대부분의컴퓨터는하나이상의주소지정방식을제공주소지정모드의구분 연산코드에의해결정 명령어형식에모드필드를추가하여구분
즉치 (immediate) 주소지정 피연산자가명령어에포함됨피연산자는 2의보수를사용 : 음수자료도고려장점 주기억장치참조가필요없음 단점 수의크기가주소필드의크기로제한됨 명령어 데이터 피연산자
직접 (direct) 주소지정 피연산자의유효주소가명령어에포함초창기모델이나저가의 CPU에서는많이사용됨장점 한번의주기억장치접근만필요 피연산자의주소를계산하기위한추가적인계산이필요없음 단점 지정할수있는위치의수가주소필드의크기로제한 명령어 주소 피연산자 주기억장치
간접 (indirect) 주소지정 주소필드는주기억장치의한워드를가리키며, 이워드는실제피연산자가저장되어있는주소를가리키고있음 장점 단점 주소필드의크기가 m 비트이면한번에 2 m 위치만참조가능 피연산자를접근하기위해서는두번의주기억장치접근필요 다단계간접주소지정 이모드에서는워드의한비트를간접플래그 (flag) 로사용하며, 이값이 1 이면다시워드를참조 단점 : 단계가깊어질수록피연산자를얻기위한주기억장치참조가많아지게됨 명령어 주소 피연산자 주기억장치
레지스터 (register) 주소지정 주소필드는 CPU 내의특정레지스터를가리키며, 이레지스터에피연산자가적재되어있다. 예 ) 3 또는 5 비트정보를주소필드로사용한다면 8(2 3 ) 에서 32(2 5 ) 개의레지스터를참조할수있다. 장점 주소필드의크기가작다. 주기억장치참조가필요없다. 한번사용된레지스터에적재된데이터를여러번사용할경우에만효과가있다. 단점 주소공간이매우제한적 레지스터의수는일반적으로몇개되질않음 명령어 레지스터번호 피연산자 레지스터
레지스터간접 (register indirect) 주소지정 주소필드는 CPU 내의특정레지스터를가리키며, 이레지스터에피연산자가적재되어있는주기억장치의주소가있다. 장점 주소필드의크기가작다. 주기억장치참조의수가간접주소지정보다하나적다. 주소공간이명령어주소필드크기에제한받지않는다. 명령어 레지스터이름 레지스터 피연산자 주기억장치
변위 (displacement) 주소지정 (1) 직접주소지정모드와레지스터간접주소지정모드를결합한방식 보통두개의주소필드를사용 이중하나는직접사용 다른하나는레지스터를가리킨다. 만약고정된레지스터를사용하거나연산코드마다지정된레지스터가있으면이필드는명령어나타내지않고사용될수있다. 직접사용되는값이 A 이면유효주소는레지스터에있는값에 A 를 더하여구하게된다. 명령어 레지스터이름 주소 피연산자 레지스터 주기억장치
변위주소지정 (2) 상대 (relative) 주소지정방식 유효주소 : 현재 PC 값에서상대적으로 A 만큼떨어진상위또는하위주소 기저 (base) 레지스터주소지정방식 유효주소 : 기저레지스터가지시하는주소에서 A 만큼떨어진주소 주기억장치관리기법중세그먼테이션 (segmentation) 을구현하기위해사용 색인 (index) 방식 기저레지스터주소지정모드의정반대로 A 가기저가되고레지스터에있는값이기저로부터의변위가된다. 이런레지스터는보통색인레지스터라한다. 예 ) 배열 A[100] 조작 : A 가배열의시작주소, 레지스터에는색인 자동색인방식 : 색인레지스터값을자동으로증가또는감소해주는 CPU 도있다. EA = A + [R]; [R] = [R]+1
스택 (stack) 주소지정 스택은주기억장치의특정영역에예약되어있음 스택을조작하기위한정보인탑포인터 (top pointer), 기저레지스터 (base register), 한계레지스터 (limit register) 정보를유지하고있음 따라서명령어에는주소를표시할필요가없음 Limit register.. TOP pointer Stack 영역 Base register
명령어형식 명령어길이 명령어를강력하게만들기위해서는길이가길면좋지만저장공간을절약하기위해서는길이가짧을수록좋다. 명령어의종류가많으면프로그래머의작업은쉬워지고, 프로그램의크기가작아진다. 프로그래머입장에서는다양한주소지정모드와보다큰주소공간을접근할수있기를원한다. 일반적으로명령어의길이는시스템의워드길이와같으며, 이워드길이는문자길이의배수가되어야한다. 만약문자길이의배수가되지않으면문자들을워드단위로전송할때낭비되는공간이생긴다.
예제 Location 0 1 2 3 4 5 6 Value 17 3 LD Acc, #5 ;Load the actual value 5 into the accumulator LD Acc, 5 ; Load the value in memory location 5 into the accumulator LD Acc, [5] ; Load the value stored in the memory location pointed to by the operand into the accumulator
명령어형식 비트의할당 보다많은종류의명령어를제공하기위해서는연산코드를위해할당되는비트의수가많아야한다. 가변길이의연산자코드 이경우최소길이가정해져있으며, 이길이내에저장되어있는값에따라연산자코드의길이가정해진다. 작은길이의연산자코드를사용할경우에는보다많은비트를주소필드로사용할수있다.
명령어형식 주소필드의할당 제공하는주소지정모드의종류 주소지정모드가암묵적 / 명시적 피연산자의수 보통두개의피연산자를사용 레지스터 vs. 주기억장치 피연산자로레지스터를사용 : 적은수의비트만으로표현가능 보통 8에서 32개의사용자접근가능레지스터 (user-visible register) 를제공 최대 5 비트만필요 레지스터집합의개수 전체레지스터를집합별로분류하여관리 보다적은수의비트를사용할수있음 접근가능한주소범위 직접주소지정모드 : 피연산자의범위가제한적 변위주소지정모드 : 큰변위를나타낼수있음 주소의세분화 (granularity): 워드단위또는바이트단위를사용 바이트단위를사용하면더많은비트가필요
명령어형식 가변길이명령어 고정길이명령어 : 명령어의길이가일정 프로세서의구조가비교적간단 가변길이명령어 : 명령어에따라서길이가다양한형태 유연한주소지정모드를사용가능 다양한종류의명령을보다경제적으로표현할 프로세서의구조가복잡 다음에인출할명령어의길이를미리예측할수없으므로가장길이가긴명령어의크기만큼의워드를인출 따라서한번인출에여러명령어를인출하는경우가발생