LAB‎ > ‎

머신별 코드 배정

V01
OPCODE할당
0??
1??LDA
2??STA
3??ADDA
4??SUBA
500COB
501IN
502OUT

V02
OPCODE할당Since
0??
1??LDAV01
2??STAV01
3??ADDAV01
4??SUBAV01
500COBV01
501INV01
502OUTV01
511SKZ흐름 제어 추가
512SKP
513SKN
6??JMP

V03
OPCODE할당Since
000NOP
1??LDAV01
2??STAV01
3??ADDAV01
4??SUBAV01
500COBV01
501INV01
502OUTV01
503INCA
504DECA
505SWAPAX레지스터 X 추가A,X = X,A
511SKZV02
512SKPV02
513SKNV02
6??JMPV02
7??ADDA *
8??ADDA @(레지스터 X 관련)

V04
OPCODE할당Since
000NOPV03
1??LDAV01
2??STAV01
3??ADDAV01
4??SUBAV01
500COBV01
501INV01
502OUTV01
503INCAV03
504DECAV03
505SWAPAXV03
511SKZV02
512SKPV02
513SKNV02
52?LDA #
53?ADDA #
54?SUBA #
6??JMPV02
7??ADDA *V03
8??ADDA @V03

V05
OPCODE할당Since
000NOPV03
1??LDAV01
2??STAV01
3??ADDAV01
4??SUBAV01
500COBV01
501INV01
502OUTV01
503INCAV03
504DECAV03
505SWAPAXV03
506SWAPAR레지스터 R 추가A,R = R,A
511SKZV02
512SKPV02
513SKNV02
514SETRTN(레지스터 R 관련)R <- PC +2
515JMP *R(레지스터 R 관련)
52?LDA #V04
53?ADDA #V04
54?SUBA #V04
6??JMPV02
7??ADDA *V03
8??ADDA @V03

V06
OPCODE할당Since
000NOPV03
1??LDAV01
2??STAV01
3??ADDAV01
4??SUBAV01
500COBV01
501INV01
502OUTV01
503INCAV03
504DECAV03
505SWAPAXV03
506SWAPARV05
507SWAPAB레지스터 B 추가
511SKZV02
512SKPV02
513SKNV02
514SETRTNV05
515JMP *RV05
516NEGA
52?LDA #V04
53?ADDA #V04
54?SUBA #V04
55?LDA %(레지스터 B 관련)
56?STA %(레지스터 B 관련)
58?ADDA %(레지스터 B 관련)
6??JMPV02
7??ADDA *V03
8??ADDA @V03
V07
OPCODE할당Since
000NOPV03
1??LDAV01
2??STAV01
3??ADDAV01
4??SUBAV01
500COBV01
501INV01
502OUTV01
503INCAV03
504DECAV03
505SWAPAXV03
506SWAPARV05
507SWAPABV06
508SWAPASP레지스터 SP 추가A,SP = SP,A
511SKZV02
512SKPV02
513SKNV02
514SETRTNV05
515JMP *RV05
516NEGAV06
52?LDA #V04
53?ADDA #V04
54?SUBA #V04
55?LDA %V06
56?STA %V06
58?ADDA %V06
570PUSHALL(레지스터 SP 관련)모든 Visible 레지스터
571POPALL(레지스터 SP 관련)모든 Visible 레지스터
572PUSHA(레지스터 SP 관련)
573POPA(레지스터 SP 관련)
574PUSHR(레지스터 SP 관련)
575POPR(레지스터 SP 관련)
576MOVBSP(레지스터 SP 관련)
577MOVSPB(레지스터 SP 관련)
6??JMPV02
7??ADDA *V03
8??ADDA @V03

[머신 08]
OPCODE할당Since레지스터
0000NOP0A
01RRSWAP R R1X
02RRCMP R R2B
03RRADD R R3R
04RRADD R *R4SP
0500IN5C
0600OUT6D0
0707D1
0718D2
0729D3
073
074
075
076
077RJMP *@*R
078RJMP *R레지스터 R의 값으로 점프
079RNEG R
080RAND A R
081ROR A R
082RXOR A R
083DSHT
084VASHR
085DROT
086RINC R
087RDEC R
088RINV R
089VSGMT V#세그먼트 값 변경
090CSK<codtion>
0: SKIP, 1: SKZ, 2: SKP, 3: SKN, 4: SKNE, 5: SKZP, 6: SKZN, 7: SKO, 8: SKCA
091VLD A #
SKP는 0이 아니고, 음수가 아니는 것으로 변경, V07 이전의 SKP는 SKZP 로 변경됨
092VADD A #
093VSETRTN NEAR#PC +V
094RPUSH R
095RPOP R
096RCMP A *R
097RIMUL A RX:A <- A * R, X 설정시 CA 셋팅
098RIDIV A RA <- X:A / R, X <- X:A % R
099RCLR R
1999LD A
2999ST A
3999LD A @
4999ST A @
5999JMP
6999JMP *@
7
8099JMP NEAR
8199LD A %
8299ST A %
8399LDA @%
8499STA @%
8599JMP *%
8699JMP *@%
87RRMOV R R
88RRMOV R *R
89RRMOV *R R
90RRMOV R @*R
91RRMOV @*R R
9299ADD A %
9399ADD A @%
94
95
96
97
98
9990PUSHALL
9991POPALL
9992
9993
9994SETRTN#PC +2
9995SGMT
#현재 PC의 SEGMENT 번호로 변경
9996
9997
9998
9999COB or HALT

특징
1) 레지스터 및 메모리 확장
- A, X, B, R, SP, C, D0, D1, D2, D3 (10개)
- 메모리 4자리

2) SKIP 조건 확장 
- Z(==), P(>), N(<), NE(!=), ZP(>=), ZN(<=), O(오버플로우), CA(캐리생성)

3) MOV <dest> <src>
- 레지스터(src)에서 레지스터(dest)로 이동

4) CMP <reg1> <reg2>
- 두 값을 비교(빼기 연산(reg1-reg2)을 하지만 그 결과를 저장하지는 않고 PSR만 세팅함)

5) Addressing Mode 추가
- NEAR: 현재 위치(PC)에서 거리(Displacement or Offset)
- @%, *@%, @*: 복합

Comments