Brian --

> Its not going to work, if I understand it correctly.  I tried doing it
> (even set up the symbol '*' to mean the current PC) and do it, but it
> seems the ops take a relative offset.  Take jump_i, for example:

Taking this into account, I modivied jump.pasm and fixed the offsets.
I tested it this way...

  $ assemble.pl --output t/jump.pbc --listing t/jump.list t/jump.pasm
  $ test_prog t/jump.pbc
  Jump test.
  Jumping to subroutine...
  $ perl disassemble.pl t/jump.pbc
   ....

I also did 'vi t/jump.list'. With these hard-coded relative offsets, I
think the program should be producing the desired output, but it
doesn't. If it did, I could do some tricks in jakoc and/or assemble.pl
to create a pseudo-op for jumping to any label, and another for
setting up the return-offset based on the end-label of the destination
block and the label we want it to return to. It sure would be nice,
though, to have a real 'absjump_i' opcode (really start-of-bytecode-
relative rather than current-program-counter relative).

It would also be helpful to have jump_ic and absjump_ic, rather than
having to load these things into registers.

Anyway, I'm attaching the revised jump.pasm example. Maybe I still
don't have the offsets calculated right, but I stared at jump.list
and the disassembly listing for a while and I *think* they are
right.

I wish I had a tracing mode where I could watch exactly where it
was jumping to and what ops it was executing. I still wonder if
somehow its jumping out of the bytecode and landing on an op zero
(end). Jumping out of the bytecode *should* raise an error, though,
no?

If I'm not using this right, I sure would like to see an example of
the correct use of jump_i...


Regards,

-- 
 _____________________________________________________________________ 
/     perl -e 'srand(-2091643526); print chr rand 90 for (0..4)'      \

   Gregor N. Purdy                          [EMAIL PROTECTED]
   Focus Research, Inc.                http://www.focusresearch.com/
   8080 Beckett Center Drive #203                   513-860-3570 vox
   West Chester, OH 45069                           513-860-3579 fax
\_____________________________________________________________________/
#
# jump.pasm
#
# Copyright (C) 2001 Gregor N. Purdy. All rights reserved.
# This program is free software. It is subject to the same
# license as Perl itself.
#

MAIN:       print "Jump test.\n"
            print "Jumping to subroutine...\n"
            set I1, 20
            jump I1

RET:        print "Returned from subroutine!\n"
            end

SUB:        print "Entered subroutine...\n"
            set I2, -32
            jump I2

Reply via email to