home .. forth .. colorforth mail list archive ..

Re: [colorforth] new color


On Sat, 4 Jun 2005, Ray St. Marie wrote:

And there you go. Proof of the ambiguity about how these things work.

There is no ambiguity here, but I see some confusion in your understanding of a subroutine call. Lets try an example with your 'array'.

: string pop ;
: array string 2/ 2/ ;
: test align array 1 , 2 , 3 ,

Suppose I enter this in a block, compile it. I've dissasebled the output below so perhaps this is more clear to you:

string:
 8149fbb:       lea    -4(%esi),%esi
 8149fbe:       mov    %eax,(%esi)
 8149fc0:       pop    %eax
 8149fc1:       ret
array:
 8149fc2:       call   0x8149fbb
 8149fc7:       sar    %eax
 8149fc9:       sar    %eax
 8149fcb:       ret
test:
 8149fcc:       nop
 8149fcd:       nop
 8149fce:       nop
 8149fcf:       call   0x8149fc2
 8149fd4:       .int 1
 8149fd8:       .int 2
 8149fdc:       .int 3

Above you see the effect of the macros (pop, 2/, align). I'd like to show a trace of this program, I'll use the following notation for the stacks:

( d2 d1 d0 -- r0 r1 r3 )

d0 and r0 denoting the top elements of the data and return stack respectively. Starting with 'test' (8149fcc):

test:
 8149fcc: nop                ( -- )
 8149fcd: nop                ( -- )
 8149fce: nop                ( -- )
 8149fcf: call   0x8149fc2   ( -- )
array:
 8149fc2: call   0x8149fbb   ( -- 0x8149fd4 )
string:
 8149fbb: lea  -4(%esi),%esi ( -- 0x8149fc7 0x8149fd4 )
 8149fbe: mov    %eax,(%esi) ( -- 0x8149fc7 0x8149fd4 )
 8149fc0: pop    %eax        ( 0x8149fc7 -- 0x8149fd4 )
 8149fc1: ret                ( 0x8149fc7 -- 0x8149fd4 )
 8149fd4: ...                ( 0x8149fc7 -- )

At this point in the trace, you've started to execute the data you had defined ( 1 , 2 , 3 , ), I hope it is clear why this defintion of array is incorrect. I also hope this gives you a better appreciation for call/ret.

Mark

---------------------------------------------------------------------
To unsubscribe, e-mail: colorforth-unsubscribe@xxxxxxxxxxxxxxxxxx
For additional commands, e-mail: colorforth-help@xxxxxxxxxxxxxxxxxx
Main web page - http://www.colorforth.com