수업 때 쓰기위해 교수님께서 만드신 어셈블러...@_@
레지스터 :
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 |