MIX의 명령어(1)

MIX 명령어의 구성
MIX에서 한 개의 명령어는 아래와 같이 한 개의 워드로 구성되어 있습니다.

+-+-+-+-+-+-+
|0|1|2|3|4|5|
+-+-+-+-+-+-+
|S|A|A|I|F|C|
+-+-+-+-+-+-+
(0:2)은 Address, 즉 주소를 나타냅니다. S는 +도 될 수 있고 -도 될 수 있습니다.

(3:3)은 Index register, 즉 rI1~rI6를 나타냅니다. 0인 경우에서는 Index register를 사용하지 않습니다.

(4:4)는 Field, 즉 Address + Index register에 있는 워드의 어느 부분을 쓸 것인지를 나타냅니다. 이 부분에 (X:Y)가 들어가는 것이죠. 실제로 들어가는 숫자는 8X + Y입니다.

(5:5)는 Code, 즉 뭘 할 것인지를 나타냅니다.

MIX 명령어의 표기법
Code Address,I(F)
와 같이 표기를 합니다. I 부분을 생략한 경우에는 Index register를 사용하지 않고 F 부분을 생략한 경우에는 (0:5)를 의미합니다.

- LDA(Load A). C=8, F=field.
메모리에 있는 내용을 rA에 넣는 명령어입니다. 1000번지에

+-+-+-+-+-+-+
|-|5|6|7|8|9|
+-+-+-+-+-+-+
가 들어있다고 하면,

LDA 1000

을 실행하면, rA에는

+-+-+-+-+-+-+
|-|5|6|7|8|9|
+-+-+-+-+-+-+
가 들어가고,

LDA 1000(0:3)

을 실행하면, rA에는

+-+-+-+-+-+-+
|-|0|0|5|6|7|
+-+-+-+-+-+-+
이 들어갑니다. rI3에 300이 들어있다고 하고,

LDA 700,3(4:5)

를 실행하면, rA에는

+-+-+-+-+-+-+
|+|0|0|0|8|9|
+-+-+-+-+-+-+
가 들어갑니다.

- LDX(Load X), C=15, F=field.
LDA와 동일하나, rA 대신 rX에 넣는다는 점만 다릅니다.

- LDi(Load i), C=8+i, F=field.
LDi가 실제 명령어가 아니라 LD1, LD2, LD3, LD4, LD5, LD6를 나타내고 따라서 C 또한 9, 10, 11, 12, 13, 14입니다. LDA, LDX와 동일하나, Index register는 Sign 비트 및 2바이트로 구성되어 있으므로, 첫 번째, 두 번째, 세 번째 바이트가 0이라 생각하고 넣습니다.

- LDAN(Load A negative). C=16, F=field.
- LDXN(Load X negative). C=23, F=field.
- LDiN(Load i negative). C=16+i, F=field.
LDA, LDX, LDi와 동일하나, Sign 비트를 바꾼다. 즉, +이면 -로, -이면 +로 바꾼다.

- STA(Store A). C=24, F=field.
rA에 있는 내용을 메모리에 저장합니다. LDA의 반대방향으로 실행된다고 생각하시면 됩니다. 예를 들어, rA에

+-+-+-+-+-+-+
|-|3|4|5|6|7|
+-+-+-+-+-+-+
이 들어있고, rI2에 100이 들어있는 상태에서

STA 900,2(0:1)

을 실행하면, 1000번지에는

+-+-+-+-+-+-+
|-|0|0|0|0|3|
+-+-+-+-+-+-+
이 저장됩니다.

- STX(Store X). C=31, F=field.
STA와 동일하나, rA 대신 rX를 사용한다는 점만 다릅니다.

- STi(Store i). C=24+i, F=field.
Index register를 메모리에 저장합니다.

- STJ(Store J). C=32, F=field.
rJ를 메모리에 저장합니다.

- STZ(Store zero). C=33, F=field.
메모리에 0을 저장합니다.

- ADD(Add). C=1, F=field.
메모리에 있는 값을 rA와 더한 뒤, rA에 저장합니다. 예를 들어, 1000번지에

+-+-+-+-+-+-+
|+|1|2|3|4|5|
+-+-+-+-+-+-+
가 있다고 하고, rA가

+-+-+-+-+-+-+
|-|0|0|0|0|3|
+-+-+-+-+-+-+
일 때,

ADD 1000

을 실행하면, 1000번지는 그대로 이고, rA는

+-+-+-+-+-+-+
|+|1|2|3|4|2|
+-+-+-+-+-+-+
가 됩니다.

- SUB(Subtract). C=2, F=field.
ADD와 동일하나, 더하는 것이 아니라 뺍니다.

- MUL(Multiply). C=3, F=field.
메모리에 있는 값을 rA와 곱한 뒤, rA 및 rX(둘을 함께 사용하여 10바이트로 다룹니다)에 저장합니다. 예를 들어, 1000번지에

+-+-+-+-+-+-+
|+|0|0|0|0|3|
+-+-+-+-+-+-+
가 있다고 하고, rA에

+-+-+-+-+-+-+
|+|0|0|0|0|2|
+-+-+-+-+-+-+
이 있을 때,

MUL 1000

을 실행하면, rA에는

+-+-+-+-+-+-+
|+|0|0|0|0|0|
+-+-+-+-+-+-+
가 저장되고, rX에는

+-+-+-+-+-+-+
|+|0|0|0|0|6|
+-+-+-+-+-+-+
가 저장됩니다.

또 다른 예를 들면, 1000번지에

+-+-+-+-+-+-+
|+|0|2|0|0|0|
+-+-+-+-+-+-+
가 있다고 하고, rA에

+-+-+-+-+-+-+
|+|1|2|3|4|5|
+-+-+-+-+-+-+
이 있을 때,

MUL 1000

을 실행하면, rA에는

+-+-+-+-+-+-+
|+|0|0|2|4|6|
+-+-+-+-+-+-+
가 저장되고, rX에는

+-+-+--+-+-+-+
|+|8|10|0|0|0|
+-+-+--+-+-+-+
가 저장됩니다.

- DIV(Divide). C=4, F=field.
rA 및 rX에 있는 값(둘을 함께 사용하여 10바이트로 다룹니다)을 메모리에 있는 값으로 나눠서 rA에는 몫을, rX에는 나머지를 저장합니다. rA이

+-+-+-+-+-+-+
|+|0|0|0|0|0|
+-+-+-+-+-+-+
이고, rX가

+-+-+-+-+-+--+
|+|0|0|0|0|23|
+-+-+-+-+-+--+
이고, 1000번지에

+-+-+-+-+-+-+
|+|0|0|0|0|6|
+-+-+-+-+-+-+
이 있을 때,

DIV 1000

을 실행하면, rA에는

+-+-+-+-+-+-+
|+|0|0|0|0|3|
+-+-+-+-+-+-+
이 저장되고, rX에는

+-+-+-+-+-+-+
|+|0|0|0|0|5|
+-+-+-+-+-+-+
가 저장됩니다.

- ENTA(Enter A). C=48, F=2.
명령어 A 부분, 즉 (0:2)와 Index register를 더해서 rA에 저장합니다. 예를 들어, rI3이

+-+-+-+
|+|4|5|
+-+-+-+
일 때,

ENTA 2,3

을 실행하면, rA에

+-+-+-+-+-+-+
|+|0|0|0|4|7|
+-+-+-+-+-+-+
이 저장됩니다.

- ENTX(Enter X). C=55, F=2.
ENTA와 동일하나, rX에 저장합니다.

- ENTi(Enter i). C=48+i, F=2.
ENTA와 동일하나, Index register에 저장합니다.

- ENNA(Enter negative A). C=48, F=3.
- ENNX(Enter negative X). C=55, F=3.
- ENNi(Enter negative i). C=48+i, F=3.
ENT, ENTX, ENTi와 동일하나, Sign 비트를 바꿔서 저장합니다. 즉, +이면 -로, -이면 +로 저장합니다.

- INCA(Increase A). C=48, F=0
명령어 A 부분, 즉 (0:2)와 Index register를 rA에 더해서 rA에 저장합니다. 예를 들어, rA가

+-+-+-+-+-+-+
|+|0|0|0|2|1|
+-+-+-+-+-+-+
rI3이

+-+-+-+
|+|4|5|
+-+-+-+
일 때,

INCA 2,3

을 실행하면, rA에

+-+-+-+-+-+-+
|+|0|0|0|6|8|
+-+-+-+-+-+-+
이 저장됩니다.

- INCX(Increase X). C=55, F=0.
ENTA와 동일하나, rX에 저장합니다.

- INCi(Increase i). C=48+i, F=0.
ENTA와 동일하나, Index register에 저장합니다.

- DECA(Decrease A). C=48, F=1.
- DECX(Decrease X). C=55, F=1.
- DECi(Decrease i). C=48+i, F=1.
INCA, INCX, INCi와 동일하나, 명령어 A 부분, 즉 (0:2)와 Index register를 각각 레지스터에서 빼서 저장합니다.

나머지 명령어는 다음 포스팅에서~

by RedPain | 2010/05/27 19:41 | MIX | 트랙백 | 핑백(1) | 덧글(0)

트랙백 주소 : http://redpain.egloos.com/tb/3715509
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Linked at MIX of The Art O.. at 2010/06/03 16:22

... 영문판은 어둠의 경로로 PDF 파일 다운 가능. 책을 전부 스캔해서 올린 본좌가 존재함. 응?1. HELLO WORLD on MIX2. MIX의 구성 3. MIX의 명령어(1) 4. MIX의 명령어(2) 5. Overflow toggle에 영향을 줄 수 있는 명령어는? ... more

:         :

:

비공개 덧글

◀ 이전 페이지다음 페이지 ▶