CMP EMBEDDED.COM

Login | Register     Welcome Guest  
HOME DESIGN PRODUCTS COLUMNS E-LEARNING CONFERENCES CODE FORUMS/BLOGS NEWSLETTERS CONTACT FEATURES RSS RSS




Listing 1 In-line interpreting

main

lda x ; typical assembly language stuff

ldb y

ada b

sta z

...

call sweet16 ; enter interpreter

PUSH 123 ; sweet 16 instructions

PUSH 456

ADD

POPAB

EXIT ; leave sweet 16

sta z ; back to assembly

stb z+1

...


Listing 2 Data structures

short stack[1024]; // operand stack

short return_stack[1024]; // return stack

short heap[1024]; // local “RAM”

short ip = 0; // instruction pointer

short sp = 0; // stack pointer

short rsp = 0; // pointer for return stack


Listing 3 Typical operations

case NEG:

stack[sp-1] = -stack[sp-1];

break;

case INC:

++stack[sp-1];

break;

...

case ADD:

—sp;

stack[sp-1] += stack[sp];

break;

case SUB:

—sp;

stack[sp-1] -= stack[sp];

break;


Listing 4 The interpreter

// main loop

while(1){

instr = program[ip++];

switch(instr){

case NOP:

break;

case HALT:

—ip;

return;

break;

...

}

sp = min(max(sp, 0), 255);

rsp = min(max(rsp, 0), 255);

ip %= 1024;

}


Listing 5 Defining opcodes.

typedef enum{ NOP, HALT, ...

PUSH, POP, ...

ADD, SUB, ...

} op;

Return to Embedded.com

Send comments to: Webmaster
All material on this site Copyright © 2000
CMP Media Inc. All rights reserved.

Embedded.com Career Center
Looking for a new job?
SEARCH JOBS

Browse all jobs

SPONSOR
RECENT JOB POSTINGS





 :