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