워킹 레지스터 – Working Register

워킹 레지스터는 임시 저장 공간이다.
4 비트 연산을 하는 (구)KS57 (현)S3C7XXX 계열의 4Bit MCU 의 경우 한번에 연산할 수 있는 데이터 양이 4 Bit 이기 때문에 주소가 가르키는 곳의 비트가 4 비트이다. ( 당연한거자나.. -_ㅡ;;; )
이곳은 4 비트 관련 설명이므로 8 Bit MCU 내용은 KIN 하자.

4 Bit MCU 가 4 Bit 연산만 할 수 있다는 편견은 안드로메다에 버려야 한다.
우리가 쓰는 PC 의 경우 64 Bit 데이터도 처리 가능하다.

일단 레지스터 구조는 중요하다.
삼성 4 Bit MCU 는 00 H ~ 1F H 까지의 레지스터를 가지고 있다.
구지 갯수로 따지면 32 개의 레지스터다.
하지만 한번에 건들일 수는 없다.  4 Bit 로 표현가능한 수는 0 – 7, 8 개 뿐이기 때문에
8 개로 쪼개 Bank 라는 단위로 표현하고, 레지스터 뱅크이기 때문에 정확한 명칭은
Register Bank 이다.
32 나누기 7 은 4 이므로 4 개의 Register Bank로 나뉘어 있다.
보기 좋게 트리 형태로 보도록 하자.  그림판으로 그리기 귀찮으니 걍 텍스트로 그리겠다.

Register Bank 0 – 0x00  A
– 0x01  E
– 0x02  L
– 0x03  H
– 0x04  X
– 0x05  W
– 0x06  Z
– 0x07  Y
Register Bank 1 – 0x08  A
– 0x09  E
– 0x0A  L
– 0x0B  H
– 0x0C  X
– 0x0D  W
– 0x0E  Z
– 0x0F  Y
※ 이런식으로 Register Bank 3 까지 이어진다. (더 그리기 귀찮다.)

여기서 의문이 2 가지 생긴다.
첫째로 이름이 같다.
둘째로 4 Bit 라 한 주소지에 8 명밖에 못산다.  더 큰수를 표현하고 싶어지는데 난해해진다.

첫번째 의문에 대한 답.  뱅크를 선택하는 명령을 사용하면 된다.
일단 ERB(Enable Register Bit) 플래그와 SRB 레지스터를 조작하며 사용할 Register Bank 를 선택한다.

ERB  SRB3  SRB2  SRB1  SRB0  Register Bank
0       0        0        X        X         BANK0
1       0        0        0         0         BANK0
1       0        0        0         1         BANK1
1       0        0        1         0         BANK2
1       0        0        1         1         BANK3

역시나 표 그리기가 귀찮았다.
SRB 는 0 과 1 만 사용된다. 2, 3 의 경우 무조건 0 이다.
ERB 의 경우 0일 경우 무조건 Register Bank0 이다.

ERB 의 경우 0과 1 둘 중 하나로 비트 제어 명령을 사용하면 바꿀 수 있다.
SRB 의 경우는 조금 다르지만 심플하다.
> SRB 3
이렇게만 하면 변경된다. ( 좆쿠나!!!! )

이번엔 8 Bit (1 Byte) 쓰기!!
8 Bit MCU 에서는 쉽겠지만…. 4 Bit MCU 에서는 저장공간 하나가 4 Bit 이고,
당연한 이야기지만 4 Bit MCU 는 한번에 4 Bit 의 데이터를 처리할 수 있다.
하.지.만. 4 Bit… 인간적으로 너무 적은 수다. 8 Bit 만 되어도 256 개를 표현할 수
있어서 그나마 쓸만한데, 4 Bit 는 8 개 밖에 표현할 수 없다.
여기서 변칙이 있으니 그건 Work Register 2 개를 조합하여 4 + 4 = 8 Bit 연산을 하는 방법이다.
YZ, WX, WL, HL, EA
이렇게 조합하면 8 Bit 연산이 가능하다.  단 저 조합 이외의 조합을 할 경우 연산 불가!!!!