Navigation:  Macros > Macro Language > Compiled Code > Op-Codes >


Previous pageReturn to chapter overviewNext page

The JMP op-code is a simple instruction to jump by a certain number of lines.


Consider the following example :


  if NumDaysInMonth(nCurYear,nCurMonth) >= nDayOfMonth    

       sRESULT = IntToStr(nDayOfMonth)


       sRESULT = ''



which compiles to :


0011 CALL n001=$0GB(@nCurYear|@nCurMonth)  //NumDaysInMonth

0011 CALL b001=$0CJ(@n001|@nDayOfMonth)  //GreaterOrEqual

0011 IF_001 @b001 jne+0003

0012 CALL sRESULT=$0DH(@nDayOfMonth)  //IntToStr

0013 JMP+0002  //ELSE_001


0015 ENDF_001


In the above example if the condition is true, the instructions following the IF_001 are all executed and when the interpreter reaches the JMP+0002 instruction it skips the following 2 lines (which correspond to the compiled code for the case when the condition is false).


Note that jumps can also be negative.


while nDate < 38000

   nDate = nDate + 1    



The above macro compiles to :


0007 CALL b001=$0FD(@nDate|38000)  //LessThan

0007 IF_001 @b001 jne+0003

0008 CALL nDate=$0AA(@nDate|1)  //Add

0009 JMP-0003  //GOIF_001

0009 ENDF_001


which shows how an IF_xxx op-code combined with a JMP op-code replaces the need for an op-code to represent the while loop.

Topic 135400 updated on 07-Mar-02.
Topic URL: