Code: Select all
Macro On(address,pos=0)
(PeekL(address+(pos*4)))
EndMacro
Macro GotoAddress(var)
JmpCallVarAddress=(var)
!MOV eax,dword [v_JmpCallVarAddress]
!JMP eax
EndMacro
Macro GosubAddress(var)
JmpCallVarAddress=(var)
!MOV eax,dword [v_JmpCallVarAddress]
!CALL eax
EndMacro
GotoAddress(On(?routines,1))
test1: Debug("Between")
test2: Debug("If you don't see between, it worked!")
Dim MyArray(4)
MyArray(0)=?routine0
MyArray(1)=?routine1
MyArray(2)=?routine2
MyArray(3)=?routine3
MyArray(4)=?routine4
For loop=0 To 4
GosubAddress(MyArray(loop))
Next
For loop=0 To 4
GosubAddress(On(?sequencetable,loop))
Next
End
routine0:
Debug("at 0")
Return
routine1:
Debug("at 1")
Return
routine2:
Debug("at 2")
Return
routine3:
Debug("at 3")
Return
routine4:
Debug("at 4")
Return
DataSection
routines:
Data.l ?test1,?test2
sequencetable:
Data.l ?routine0,?routine1,?routine2,?routine3,?routine4
EndDataSection