SubI2C1: PUSH LblJMP // subroutine. the 1st step to return instruction
BOR // make the return instruction using arg1 and the previous instruction
POP RtnSub1 // save the return instruction
POP Sub1Data2 // save the arg1
PUSH Sub1Data2
LD
POP N
PUSH Sub1Data2
PUSHI 1
ADD
POP Sub1SA
PUSHI 0
POP i
L1: PUSH i
PUSH Sub1SA
ADD
LD // ... Sub1S[i];
OUT // ... print(Sub1S[i]) ;
PUSH i
PUSHI 1
ADD
POP i
PUSH i
PUSH N
SUB
JNZ L1 // if(i < n) goto L1;
RtnSub1: JMP 0x000 // return
LblJMP: 0x4000
Sub1Data2: 0x0000
Sub1SA: 0x0000
i: 0x0000
N: 0x0000
mem[12'h000]=16'h201b ; //SubI2C1: PUSH LblJMP mem[12'h001]=16'hf006 ; // BOR mem[12'h002]=16'h301a ; // POP RtnSub1 mem[12'h003]=16'h301c ; // POP Sub1Data2 mem[12'h004]=16'h201c ; // PUSH Sub1Data2 mem[12'h005]=16'h7000 ; // LD mem[12'h006]=16'h301f ; // POP N mem[12'h007]=16'h201c ; // PUSH Sub1Data2 mem[12'h008]=16'h1001 ; // PUSHI 1 mem[12'h009]=16'hf000 ; // ADD mem[12'h00a]=16'h301d ; // POP Sub1SA mem[12'h00b]=16'h1000 ; // PUSHI 0 mem[12'h00c]=16'h301e ; // POP i mem[12'h00d]=16'h201e ; //L1: PUSH i mem[12'h00e]=16'h201d ; // PUSH Sub1SA mem[12'h00f]=16'hf000 ; // ADD mem[12'h010]=16'h7000 ; // LD mem[12'h011]=16'he000 ; // OUT mem[12'h012]=16'h201e ; // PUSH i mem[12'h013]=16'h1001 ; // PUSHI 1 mem[12'h014]=16'hf000 ; // ADD mem[12'h015]=16'h301e ; // POP i mem[12'h016]=16'h201e ; // PUSH i mem[12'h017]=16'h201f ; // PUSH N mem[12'h018]=16'hf001 ; // SUB mem[12'h019]=16'h600d ; // JNZ L1 mem[12'h01a]=16'h4000 ; //RtnSub1: JMP 0x000 mem[12'h01b]=16'h4000 ; //LblJMP: 0x4000 mem[12'h01c]=16'h0000 ; //Sub1Data2: 0x0000 mem[12'h01d]=16'h0000 ; //Sub1SA: 0x0000 mem[12'h01e]=16'h0000 ; //i: 0x0000 mem[12'h01f]=16'h0000 ; //N: 0x0000