SIC머신은 그냥 그 바이트자체가 주소였습니다.
100번째 위치한 바이트다. 그럼 100이 주소였죠.
또는 Indexed Addressing이라고 하여, (x)레지스터의 값을 더해주는 정도였습니다.
하지만 SIC/XE 머신은 조금 다릅니다.
어떻게 주소를 계산하는지 알아보도록 해요!
아래는 포멧3번을 사용하는 주소사용방법입니다.
포멧3번에서 SIC/XE 머신에서는 상대주소(Relative Addressing)가 사용이됩니다.
즉,
나는 어떤놈으로부터 얼만큼 떨어져있다.
나는 영희로부터 50미터 앞에 있다.
이게 바로 상대주소입니다.
SIC/XE 머신에서 상대주소를 취급하는데, 2가지가 있습니다.
한가지는 (B)레지스터를 사용하는 Base Relative
또 한가지는 (PC)레지스터를 사용하는 PC Relative 입니다
두가지 모두 어렵지 않으니 하나하나 알아보도록 하죠.
먼저 Base Relative부터 알아봅시다.
하나도 안어려워요~^^
이 Base Relative는 프로그래머가 지정합니다.
어떤애의 주소를 계산하는데, 기준이 되는 놈인 이놈이다.
이렇게 미리 지정을 합니다.
내가 10라는 놈을 상대주소로 정해버리면,
10이후에 오는 애들만 주소를 알 수 있습니다.
1, 2, 3, ~, 9는 모르죠. 오로지 11, 12, 13...이렇게, 뒤에오는애들만 알수있습니다.
결국 DISP (12비트) 에는 양수만을 다룰수 있으며, 그 범위도 최고 0<= DISP <=4095 까지입니다.
다음은 PC Relative입니다.
Base Relative처럼 이후에 오는애들의 주소만 알수 있는 경우와는 다르게,
앞 뒤 모두 가능합니다!
DISP는 12비트니까 -2048 <= DISP <= 2047까지 표현이 가능합니다.
포멧3번을 보시면 n | i | x | b | p | e 라는 부분이 있었죠.
이녀석들은 각각 1비트 씩이었습니다.
그럼 이녀석들은 정체는 무엇일까요?
자 전혀 어렵지 않으니, 쉽게쉽게 들으시면 됩니다.
b = 1, p = 0 일때는 바로 Base Relative를 사용합니다. (B)레지스터에서 얼만큼 떨어져있어요.
b = 0, p = 1 일때는 PC Relative를 사용! (PC)레지스터에서 얼만큼 떨어져있어요.
b = 0, p = 0 일때는 다이렉트 어드레싱방법을 사용합니다. DISP자체를 사용합니다.
그러니깐 b, p에 따라서 어떤 주소방법을 사용하는지 결정되는거군요. 신기하네요.
x는 배열과같은것을 사용할때 쓰는거라서 1이든 0이든 상관없습니다.
단 상대주소, 다이렉트주소일때만 상관이 없다는것. 잊지 마세요.
휴~ 많은 내용이 있었던 것 같지만, 결국
나는 영희로부터 얼만큼 떨어져있다 라는 걸 쓰는데 2가지가 있다.
그중 하나는 무조건 영희 이후에 오는 애들만 어디사는지 알수있고,
또 하나는 영희 앞에 오든 뒤에오든 상관없이 알수있다.
그러한 방법을 결정짓는데 b, p가 사용된다.
위의 계산된 주소를 어떻게 사용 하라고? 어떻게 해석해야 하는걸까? |
자, 상대주소가 뭔지 알았습니다.
그럼 저 주소를 어떻게 해석해야 할까요?
DISP에 저장되어있는 알 수 없는 2진수를 어떻게 해석해야지, 컴퓨터가 의도한 주소값을 알수 있을까요?
주소를 해석하는 방법에대해서 알아보도록 합시다. 전혀~~ 어렵지 않습니다.
포멧 3번에서
n = 0, i = 1 이면, DISP에 오는 주소자체가 주소입니다.
만약 DISP에 100이 저장되어있다고 합시다. 그럼 이 100을 그냥 사용합니다.
100이 저장되어 있다고 거기에 담겨있는 녀석을 사용하는게 절대 아닙니다.
그냥 100을 사용합니다!!
이걸 Immediate Addressing (즉시 주소정도랄까..)라고 합니다.
n = 1, i = 0이면?
Indriect Addressing (간접 주소)로 해석을 해야합니다.
C언어의 포인터과 비슷한 개념인데요,
예를들어 DISP에 100이 저장되어있습니다.
그럼 100번째 바이트로 가봅니다.
100번째 바이트에는 200이라는 정보가 담겨져 있군요?
그럼 다시 200번째 바이트로 이동!! 바로 이 200번째 담겨진 정보를 사용하는겁니다.
n = 1, i = 1일때는 그럼 무엇일까요?
Simple Addressing (단순 주소)로 해석됩니다.
DISP에 100이 저장되어 있으면, 100번째 위치한 메모리에 담겨진 정보를 사용합니다. 어렵지 않죠~
n = 0, i = 0이면 , SIC머신에서 사용했던, 다이렉트 어드레싱으로 해석되어 사용됩니다.
SIC머신에선 Adressing에 15비트를 사용했지만
Format 3번에서는 Adressing은 보이지도 않고, DISP가 보이는군요.
자 이럴때는 b, p, e , DISP = 15비트가 Adressing으로 사용됩니다.
참 쉽죠~~어렵지 않습니다!
여기서 꼭 기억하셔야 할 점은
n = 1 or 0, p = 1 or 0처럼 단순주소일 경우에만!!!!!! x가 1이든 0이든 상관없이 사용된다는 점입니다.
Immediate Addressing은 상수니깐 전혀 의미가 없습니다.
Indirect Addressing은 괜히 사용하면 해석만 더 복잡해질 뿐입니다.
자~ 이렇게, 주소를 해석하는 방법까지 배워봤습니다.
글만 길지, 정리하면 쉽습니다.
n, i 에 따라서 주소를 해석하는 방법이 달라진다.
Base Relative건 PC Relative건, Direct Addressing이건
n, i의 의해서 한번 더 뛰냐, 그냥 뛰냐, 안뛰냐의 차이일 뿐!
쉽죠?
어렵다구요?
예제를 보면 이해가 한번에 되실걸요.
우리가 주목해야 할 부분은 하얀색 상자입니다. OP n i x b p e ...
자 보도록하죠.
OP는 명령어라고 그랬습니다.
모두 00000이네요. 무슨 명령어인지는 모르겠지만 하여튼 뭘 하라고 하네요.
첫번째 줄을 보도록하죠.
n i x b p e
1 1 0 0 1 0 이네요!
n = 1, i = 1이면 Simple Addressing이므로, "계산된 값이 가르키는 주소에 담긴 정보를 사용하는군"이라고 해석해야 합니다.
b = 0, p = 1이면 PC Relative를 사용한다고 그랬습니다. (PC) 레지스터에 지금003000이 저장되어있군요.
(PC) = 003000
DISP = 600
PC Relative가 상대주소이므로, 얼마만큼 떨어져있다.
PC로부터 DISP만큼 떨어져있다. 결국 3600이 되겠군요!
Simple Addressing이므로 ,3600이 가르키는 값을 사용하면 됩니다!
메모리 3600번지에 103000이담겨져있네요! 이걸 OP(명령어)대로 처리하면 됩니다. 000000이 뭔진 모르겠지만 하여튼요..-_-;
두번째 줄을 보도록 하죠.
n = 1, i = 1이므로 Simple Addressing이네요. 계산된 주소에 담긴 정보를 사용하는.
b = 1, p = 0 이므로 Base Relative (B)레지스터를 사용하는군요.
또 x = 1이니깐 (X)레지스터도 사용됩니다.
(B) = 006000
(X) = 000090
DISP = 300
상대주소라고 다시한번 각인시켜드립니다.
6000에서 300만큼 떨어져있고 거기에 Indexed Addressing 만큼 즉 +90만큼 떨어져있는
결과값 6390이 나옵니다.
6390번지에는00C303이 있네요. 이거 그냥 000000명령어로 처리하면 됩니다.
세번째 줄을 보도록 하죠.
n = 1, i = 0 이므로 Indirect Addressing으로 해석합시다. 포인터와 비슷하다고 했죠? 참조를 2번합니다.
b = 0, p = 1이므로 Base Relative (PC)사용 입니다.
(PC) = 003000
DISP = 30
상대주소이므로 003000을 기준으로 030만큼 떨어져있습니다.
003030을 참조해봅시다.
003600이 저장되어있군요. Indirect Addressing은 뭐라고 했죠? 한번더 참조해야합니다.
3600번지로 가봅시다.103000이네요. 이걸 000000명령어로 처리하면 끝!
네번째 줄을 보도록 하죠.
n = 0, i = 1 이므로 Immedate Addressing으로 해석됩니다. 값 그 자체가 사용됩니다.
b = 0, p = 0 이므로 아무런 레지스터도 사용하지 않습니다. 다이렉트에요! DISP를 그대로 사용합니다!
DISP = 30이군요.
결론, 000030을 000000명령어로 처리하면 됩니다.
다섯번째 줄!
n = 0 , i = 0 입니다. SIC머신에서 사용되는 SIC Direct Addressing으로 해석하면 됩니다.
이때는 b p e disp가 Addressing으로 사용됩니다.
계산하니 3600이나오네요.
3600번지에 저장되어있는 값은 103000입니다. 쉽죠?
n = 0, i = 0이면 SIC Direct Addressing이라는거. 절대 잊지 마세요!
마지막 여섯번째 줄.
n = 1, i = 1이므로 Simple Addressing. 계산된 주소값이 담고있는 정보를 갖다 쓰면 됩니다.
e = 1이네요. 3바이트에서 -> 4바이트로 증가됩니다. 즉 뒤에 있는 메모리까지 참조합니다.
Addressing = C303
C303번지로 가보니 003030이 있네요.
이걸 000000명령어로 처리하면 끝납니다.
어때요! 예제를 보니 참 쉽죠!
7. SIC/XE 명령어는 어떤것들이 있을까? |
자 SIC/XE도 끝나가는군요.
마지막 추가된 명령어만 보도록 하죠.
굉장히 쉽습니다.
(B)레지스터, (F)레지스터등등이 추가되었죠?
SIC과 똑같습니다.
불러오기, 저장하기 : LDB, STB
실수를 계산할 때 사용되는 : ADDF, SUBF, MULF, DIVF
레지스터와 레지스터의 명령 : ADDR, SUBR, MULR, DIVR,
수퍼바이저 콜 : SUC
I/O채널 명령 : SIO (Start I/O), TIO (Test I/O), HIO (halt I/O)
이 I/O채널 명령은 멀티테스킹처럼 사용됩니다. CPU가 무언가 연산중에도 가능한 명령어가 되겠습니다^^
이것으로 SIC/XE도 끝났습니다. 수고하셨어요 짝짝짝!!
[출처] http://1228.tistory.com
'컴퓨터공학 기초 > Embedded system' 카테고리의 다른 글
uC/os-ii 뛰어넘기 (1~6) (0) | 2013.07.22 |
---|---|
Introduce of Microprocessor (0) | 2011.10.14 |
SIC/XE 머신이란 무엇인가? (0) | 2010.09.18 |
SIC 머신이란 무엇인가? (가상컴퓨터) - 2부 (0) | 2010.09.18 |
SIC 머신이란? (가상컴퓨터) (0) | 2010.09.18 |