level operator operand1 operand2 operand3Note: Not all operands will be used with each operator. Further, each operand consists of a mode and an adress which will be explained in detail later.
Each quad will execute through the interpreter as follows:
Addressing Modes are:
Number Mode Effective Operand 0 Immediate address 1 global lvalue address 2 global rvalue stack[address] 3 local lvalue ap + address 4 local rvalue stack[ap + address]Our interpreter will read information from a file as follows:
line 1 to the program end quad - one quad per line next line - the number of initialized memory words (n) next n lines - the initial contents of these wordsThe interpreter will proceed as follows:
1) read quads into memory 2) read initial contents into memory 3) assign PC to the program begin quad 4) fetch, decode, and execute one quad at a time until program end quadOur instruction set is:
Opcode Operands Meaning 1 add op1 op2 result result <- op1 + op2 2 subtract op1 op2 result result <- op1 - op2 3 multiply op1 op2 result result <- op1 * op2 4 int divide op1 op2 result result <- op1 div op2 5 modulus op1 op2 result result <- op1 mod op2 6 unary minus op1 result result <- - op1 7 increment result result <- result + 1 8 decrement result result <- result - 1 9 dereference op1 result result <- (op1) 10 blt op1 op2 label if op1 < op2 goto label 11 bgt op1 op2 label if op1 > op2 goto label 12 ble op1 op2 label if op1 <= op2 goto label 13 bge op1 op2 label if op1 >= op2 goto label 14 bne op1 op2 label if op1 <> op2 goto label 15 beq op1 op2 label if op1 = op2 goto label 16 band op1 op2 label if op1 and op2 goto label 17 bor op1 op2 label if op1 or op2 goto label 18 bnot op1 label if op1 = 0 goto label 19 bra label goto label 20 load parameter op1 push op1 on runtime stack 21 function call op1 label op1 = # of parameters already pushed push op1 push PC push AP AP <- SP PC <- label 22 function begin op1 op1 = size of local data area SP = SP + op1 23 function return pop activation record off stack and update AP, SP, and PC. Also, put function result in location 0. 24 input op1 op1 = # items to be read interactively. Items will be read into the addresses found on top of the stack. 25 output op1 op1 = # items to be output. Items written will come from the top of the stack. 26 assign op1 result result <- op1 27 program begin marks beginning of the program 28 program end end execution