Computers/Programming Language

PL/0 Virtual Machine - instruction

emzei 2012. 3. 31. 14:20

수업 때 쓰기위해 교수님께서 만드신 어셈블러...@_@

 

레지스터 : 

P - program counter : 다음 실행 명령 주소를 갖고 있음

I  - Instruction Register :  현재 실행중인 명령의 내용을 갖고 있음

B - Base Register 

T - Top Register 

메모리 :

code[] : instruction

s[]      : data

 

 

PL/0 Machine Instruction

 

1. LIT : Load Constant

LIT  0, a

 

T = T+1

S[T] = a

 

 

2. INT : Memory Allocation

//memory allocation 위해 top 증가 - a만큼 메모리 증가

INT 0, a

 

T = T+a

 

 

3. JMP : Unconditional Jump

// P의 주소를 a로 변경해서 명령어 수행 순서를 변경

JMP 0, a

 

P = a

 

 

4. JPC : Conditional Jump

//Stack Top이 False이면 jump, true이면 다음 명령어 수행

JPC 0, a

 

T = T-1

if ( S[T+1] == false ) then

P = a

 

 

5. LOD : Load Variable

// base에서 static link를 l만큼 쫒아가 a만큼 떨어진 곳에 있는 데이터를 로드

// l이 0이면 쫒아가지않은 거랑 똑같으니까 현재의 base

LOD l, a

 

T = T+1

S[T] = S[base(l) + a]

 

 

6. STO : Store

STO 0, 0

 

T = T-2

S[ S[T+1] ] = S[T+2]

 

7. CAL : Procedure call

// l이 0이면 지역변수. base(l)은 static link

CAL l, a

 

S[T+1] = base(l)

S[T+2] = B

S[T+3] = P

B = T+1

P = a

 

 

8. RET : Return 

RET 0, 0

 

T = B-1

B = S[T+2]

P = S[T+3]



9. LDA : Variable Address Load

LDA l, a


T = T+1

S[T] = base(l)+a



10. LDI : Load Indirect

LDI 0, 0


S[T] = S[S[T]]



11. MIN : Minus

// two's complement

MIN 0, 0


S[T] = -S[T]



12. ADD, SUB, MUL, DIV, ODD, GTR, GEQ, LSS, LEQ, EQL, NEQ



13. OUT 0,0

 

'Computers > Programming Language' 카테고리의 다른 글

ch8. Statement-Level Control Structure  (0) 2012.03.22
ch7. Expression and Assignment Statements  (0) 2012.03.21
ch6-2. Data Type  (0) 2012.03.19
ch6-1. Data Type  (0) 2012.03.17
ch5. Names, bindings, type checking, and scope  (0) 2012.03.16