본문 바로가기
2학년 2학기/컴퓨터 구조

5.6 Memory reference instructions

by kkkkk1023 2024. 10. 27.

 Memory reference instructions란?

 

 

위 format에서 Opcode의 값이 0 0 0 ~ 1 1 0으로 명령어가 결정이 되고, I의 값이 0이면 직접 참조, 1이면 간접 참조인 Instruction이다.

 

 

AND(Opcode의 값이 0 0 0인 경우)

: 유효 주소가 가리키고 있는 메모리의 값과 AND 연산을 한 후 AC에 저장하는 것

 

Opcode의 값이 0 0 0 으로 동일하지만 I의 값에 따라서 16진수 표현 방식이 달라진다.

즉, 간접 참조라면 1 0 0 0 x x x으로 8 x x x가 되고 직접 참조라면 0 0 0 0 x x x으로  0 x x x가 된다. 

 

 

 


 

 

ADD(Opcode의 값이 0 0 1인 경우)

: 유효 주소가 가리키고 있는 메모리의 값과 ADD 연산을 한 후 AC에 저장하는 것

 

Opcode의 값이 0 0 1 으로 동일하지만 I의 값에 따라서 16진수 표현 방식이 달라진다.

즉, 간접 참조라면 1 0 0 1 x x x으로 9 x x x가 되고 직접 참조라면 0 0 0 1 x x x으로  1 x x x가 된다. 

 

 

 

 

 


 

 

LDA(Opcode의 값이 0 1 0인 경우)

: 유효 주소가 가리키고 있는 메모리의 값을 AC에 저장하는 것

 

Opcode의 값이 0 1 0 으로 동일하지만 I의 값에 따라서 16진수 표현 방식이 달라진다.

즉, 간접 참조라면 1 0 1 0 x x x으로 A x x x가 되고 직접 참조라면 0 0 1 0 x x x으로  2 x x x가 된다. 

 

 

 

 


 

 

STA(Opcode의 값이 0 1 1인 경우)

: AC의 값을 유효 주소가 가리키고 있는 메모리에 저장하는 것

 

Opcode의 값이 0 1 1 으로 동일하지만 I의 값에 따라서 16진수 표현 방식이 달라진다.

즉, 간접 참조라면 1 0 1 1 x x x으로 B x x x가 되고 직접 참조라면 0 0 1 1 x x x으로  3 x x x가 된다. 

 

 

 

 


 

 

 

BUN(Opcode의 값이 1 0 0인 경우)

: 유효 주소의 값을 PC(명령어 주소를 저장하는 레지스터)에 저장하는 것

 

Opcode의 값이 1 0 0 으로 동일하지만 I의 값에 따라서 16진수 표현 방식이 달라진다.

즉, 간접 참조라면 1 1 0 0 x x x으로 C x x x가 되고 직접 참조라면 0 1 0 0 x x x으로  4 x x x가 된다. 

 

❓ Branch란?

: 해당 주소의 명령어를 실행하는 것(이동하는 것)이다. 원래는 PC ← PC + 1로 다음 명령어를 순차적으로 실행했지만, Branch는 특정 주소의 명령어로 바로 넘어가서 실행하는 것을 의미한다. 

 

 

 

 

예를 들어 A라는 주소를 PC에 저장을 하면 PC는 A를 현재 명령어로 인식하고 A 명령어를 수행하게 된다. 따라서 BUN의 과정은 A라는 주소를 PC에 저장하는 과정이다. 

 

 


 

 

 

BSA(Opcode의 값이 101인 경우) - 내가 헷갈리는 명령어

: 유효 주소의 값을 PC(명령어 주소를 저장하는 레지스터)에 저장 + 돌아올(반환되는) 주소를 저장하는 것

즉, PC에 저장된 명령어 주소를 1번 유효주소가 가리키는 메모리에 저장해 놓고, 다음 유효 주소인 2번 유효 주소 값을 PC에 저장하는 것이다.

 

Opcode의 값이 1 0 1 으로 동일하지만 I의 값에 따라서 16진수 표현 방식이 달라진다.

즉, 간접 참조라면 1 1 0 1 x x x으로 D x x x가 되고 직접 참조라면 0 1 0 1 x x x으로  5 x x x가 된다. 

 

 

 

 

1. PC = 21은 20 다음으로 수행되어야 할 명령어였다. 하지만, BSA이기 때문에 다음 명령어는 다른 명령어이다.

 

2. 피연산자 주소가 135이다. 따라서 M[AR] ← PC에 의해서 21은 AR = 135에 저장된다. 

 

3. AR ← AR + 1로 인해서 유효 주소가 135에서 136으로 변경된다. 

 

4. PC ← AR에 의해서 다음 명령어는 AR = 136에 의해서 작동된다. 

 

5.  AR = 136에 의해서 작동된 명령어 끝에는 1 BUN 135라는 명령어가 있어야 다시 원래 주소로 돌아갈 수 있다. 

(1 BUN 135라는 건, 135번지에 있는 값의 유효주소인 21번지의 명령어를 다시 수행한다는 것이다. 즉, BSA로 인해서 특정 부분으로 넘어가서 명령어를 수행을 하고 끝나면 1 BUN 135이라는 명령어를 통해서 원래 진행했어야하는 명령어를 수행하도록 하는 것이다. )

 

 

 

BSA는 지금 읽고 있는 곳(위치)을 기억하고 다른 작업을 하러 갔다가 돌아올 때
쓰인다.

 

 

 

ISZ(Opcode값이 1 1 0인 경우)

: 해당 유효주소가 가르키는 메모리 공간의 값에 1을 더해서, 그 값이 0이라면 PC(명령어 주소를 저장하는 레지스터)를 다음 PC로 넘기는 것.

 

(메모리의 특정 번지의 값을 저장시켜서 계속 증가 시키면서 그 값이 0이 되면 다른 명령어를 수행할 수 있게 PC를 증가 시키는 것 ) 약간 반복문에서 continue 같은 느낌?

 

Opcode의 값이 1 1 0 으로 동일하지만 I의 값에 따라서 16진수 표현 방식이 달라진다.

즉, 간접 참조라면 1 1 1 0 x x x으로 E x x x가 되고 직접 참조라면 0 1 1 0 x x x으로  6 x x x가 된다. 

 

 

 

ISZ는 "1을 더하고, 0이 됐는지 확인한 뒤 0이라면 다음 일은 건너 뛰자"

 

 

[Memory reference instruction의 flowchart]