haileyjpark

[컴퓨터 구조] 컴퓨터 아키텍처의 주소 지정 방식과 마이크로 연산 본문

소프트웨어 공학

[컴퓨터 구조] 컴퓨터 아키텍처의 주소 지정 방식과 마이크로 연산

개발하는 헤일리 2023. 12. 24. 19:30
반응형

* 컴퓨터 구조 수업을 듣고 정리한 내용입니다.

 

컴퓨터 명령어(instruction)는 컴퓨터가 수행해야 하는 일을 나타내기 위한 비트들의 집합으로 일정한 형식을 가집니다.

컴퓨터의 제어장치는 기억장치에 저장된 명령과 데이터를 읽어서 2진 코드를 해석한 후, 명령어 수행을 위한 마이크로 연산이 이루어지는 데 필요한 제어신호를 제공하는 기능을 수

프로그래머는 컴퓨터의 내부 구조를 이해할 필요 없이 컴퓨터가 수행해야 할 작업을 명시적으로 지시할 수 있도록 해줍니다.
컴퓨터가 2진신호로 작동하기 때문에 컴퓨터가 이해하고 실행할 수 있는 2진신호로 표현된 작업 지시입니다.

컴퓨터에서 명령어를 실행하기 위해서는 명령어의 오퍼랜드(operand)가 필요합니다. 오퍼랜드는 명령어의 실행에 필요한 데이터를 가리키는 주소 또는 데이터 자체를 의미합니다. 명령어 오퍼랜드의 주소를 지정하는 방식은 크게 직접 주소 지정 방식, 간접 주소 지정 방식, 레지스터 주소 지정 방식, 변수 주소 지정 방식으로 나눌 수 있습니다.

 

명령어 오퍼랜드 주소 지정 방식

 

 

  위 그림에서, 주소 550과 551에는 주소 영역 ADRS(또는 오퍼랜드 NBR)가 700인 ‘AC에 적재하라’는 명령어가 들어있으며, 이 명령어를 가져오기 위해 PC는 550을 기억하고 있습니다.
  또한 레지스터 R1은 600을 가지고 있고, AC는 명령어가 실행된 후 그 결괏값을 저장받는 곳이라고 할 때 각 주소지정방식에 대한 설명은 다음과 같습니다.
• 직접 방식(Direct Addressing): 명령어가 직접적으로 주소를 지정하여 해당 주소에 있는 데이터를 사용합니다. 예를 들어, LDA ADRS 명령어는 주소 ADRS에 있는 데이터를 AC 레지스터에 로드합니다. 이 경우, 유효주소가 700이 되며, AC에 로드되는 오퍼랜드는 900이 됩니다.
• 즉치 방식(Immediate Addressing): 명령어 자체에 값을 가지고 있어 해당 값을 사용합니다. LDA #NBR에서 #NBR은 값 그 자체를 의미하며, 이 값을 AC 레지스터에 로드하면 오퍼랜드 700이 AC로 로드됩니다.
• 간접 방식(Indirect Addressing): 명령어의 주소 부분이 다른 주소를 참조하고, 그 주소에 있는 값으로 동작합니다. LDA [ADRS]에서 [ADRS]가 가리키는 주소의 값에 있는 데이터를 AC 레지스터에 로드하면 유효주소가 900이 되며,  AC에 로드되는 오퍼랜드는 950이 됩니다.
• 인덱스 방식(Index Addressing): 주소에 레지스터 값을 더하여 오퍼랜드를 참조합니다. LDA ADRS(R1)에서 R1의 값이 주소에 더해져 유효 주소가 계산되고, 해당 주소의 값을 AC 레지스터에 로드합니다. 이 경우, 유효주소가 700 + 600 = 1300이 되고, AC에 로드되는 오퍼랜드는 1400이 됩니다.
• 상대 방식(Relative Addressing): PC(Program Counter) 값과 주소의 합을 통해 유효 주소를 계산합니다. LDA $ADRS에서는 PC 값과 상대적인 주소의 합으로 유효 주소를 계산하고, 해당 주소의 값을 AC 레지스터에 로드합니다. 이렇게 하면 700 + 552 = 1252이고,  AC에 로드되는 오퍼랜드는 1300이 됩니다.
• 레지스터 간접 방식(Register Indirect Addressing): 레지스터의 값이 주소를 가리키며, 해당 주소의 값을 AC 레지스터에 로드합니다. LDA (R1)에서 R1 레지스터가 가리키는 주소에 있는 값을 AC 레지스터에 로드하면 유효주소가 R1값이 되며, AC로 로드되는 오퍼랜드는 주소 600에 있는 700이 됩니다.
• 레지스터 방식(Register Addressing): 레지스터 방식은 명령어에서 특정한 레지스터를 명시하고, 그 레지스터에 저장된 값을 다른 레지스터나 메모리에 복사하거나 조작하는 데 사용됩니다. 예를 들어, LDA R1 명령어는 R1 레지스터에 저장된 값을 가져와서 AC 레지스터에 로드하기 때문에, 오퍼랜드 600이 AC로 로드됩니다.

표1 )
주소지정방식 기호표기 레지스터 전송 유효주소 AC의 이용

주소 지정 방식 명령어 전송문 유효주소 AC 내용
직접주소 LDA  ADRS  AC←M[ADRS] 700 900
즉치주소 LDA #NBR  AC←NBR 551 700
간접주소 LDA [ADRS] AC←M[[ADRS]] 900 950
인덱스주소 LDA ADRS(R1)  AC←M[ADRS+R1] 1300 1400
상대주소 LDA $ADRS AC←M[ADRS+PC] 1252 1300
레지스터간접 LDA (R1) AC←M[R1] 600 700
레지스터주소 LDA R1 AC←R1 - 600



  <표1>에 7개의 주소지정방식에 대한 유효주소의 값과 AC로 로드되는 오퍼랜드, 그리고 레지스터 전송문과 각 주소지정방식에 대한 기호표를 나타내었습니다.

• LDA는 AC로의 로드(load-to-accumulator)라는 연산코드에 대한 기호입니다.
• 즉치방식에서는 기호 #를 오퍼랜드 NBR 앞에 놓습니다.
• 직접방식에서는 명령어의 주소 부분을 위해 기호 ADRS를 씁니다. 
• 대괄호([ ]) 안에 놓인 기호 ADRS는 간접주소를 나타내는데, 어떤 컴파일러나 어셈블리어에서는 기호 @로 표시할 때도 있습니다. 
• 주소 앞에 있는 기호 $는 PC에 대해 상대적인 유효주소를 나타냅니다. 
• 인덱스 방식 명령어는 주소 기호 다음에 있는 괄호 안의 레지스터 기호를 보고 알 수 있습니다. 
• 레지스터 방식은 LDA 다음에 프로세서 레지스터의 이름이 온 것을 보고 알 수 있습니다.

마이크로 연산과 2진 제어단어

 

1. 𝑅4 ← 𝑠h𝑟(𝑅5 + 𝑅6), 101 110 100 0010 001
• 마이크로 연산 설명 : 이 연산은 𝑅5와 𝑅6을 더한 후, 그 결과를 오른쪽으로 시프트하고(𝑠h𝑟), 그 값을 𝑅4에 저장한다.
• 2진 제어단어 설명
 101: 연산 선택 비트 (시프트 연산)
 110: 기능 선택 비트 (덧셈)
 100: 주소 선택 비트 (𝑅4 선택)
 0010: 제어 동작 비트 (오른쪽 시프트)
 001: 레지스터/버스 선택 비트 (𝑅5 + 𝑅6의 합 선택)
2. 𝑅7 ← 𝑅7 + 1, 2진 제어단어: 111 000 111 0001 000
• 마이크로 연산 설명 : 이 연산은 𝑅7에 저장된 값을 1 증가시켜 다시 𝑅7에 저장한다.
• 2진 제어단어 설명
 111: 연산 선택 비트 (증가 연산)
 000: 기능 선택 비트 (덧셈)
 111: 주소 선택 비트 (𝑅7 선택)
 0001: 제어 동작 비트 (증가)
 000: 레지스터/버스 선택 비트 (없음 - 1 증가할 값이 바로 버스로 전달됨)
3. 𝑂𝑢𝑡𝑝𝑢𝑡 ← 𝑅3, 2진 제어단어: 011 000 000 0000 000
• 마이크로 연산 설명 : 𝑅3에 저장된 값을 𝑂𝑢𝑡𝑝𝑢𝑡으로 출력한다.
• 2진 제어단어 설명
 011: 연산 선택 비트 (출력)
 000: 기능 선택 비트 (없음 - 출력 연산에 필요 없음)
 000: 주소 선택 비트 (𝑅3 선택)
 0000: 제어 동작 비트 (없음 - 출력할 값이 이미 버스에 존재함)
 000: 레지스터/버스 선택 비트 (없음 - 출력할 값이 버스로 전달됨)
4. 𝑅4 ← 𝑟𝑜𝑙 𝑅4, 2진 제어단어: 100 000 100 0000 110
• 마이크로 연산 설명 : 𝑅4에 저장된 값을 왼쪽으로 회전(ROL)시킨다.
• 2진 제어단어 설명
 100: 연산 선택 비트 (회전 연산)
 000: 기능 선택 비트 (없음 - 회전 연산에 필요 없음)
 100: 주소 선택 비트 (𝑅4 선택)
 0000: 제어 동작 비트 (회전)
 110: 레지스터/버스 선택 비트 (없음 - 회전할 값이 이미 버스에 존재함)
5. 𝑅5 ← 0, 2진 제어단어: 000 000 101 0000 011
• 마이크로 연산 설명 : 𝑅5에 0을 저장한다.
• 2진 제어단어 설명
 000: 연산 선택 비트 (데이터 이동)
 000: 기능 선택 비트 (없음 - 데이터 이동에 필요 없음)
 101: 주소 선택 비트 (𝑅5 선택)
 0000: 제어 동작 비트 (데이터 이동 - 0으로 설정)
 011: 레지스터/버스 선택 비트 (0을 버스에 전달하여 𝑅5에 저장함)