/* A sometimes minimal FORTH compiler and tutorial for Linux / i386 systems. -*- asm -*-
By Richard W.M. Jones <rich@annexia.org> http://annexia.org/forth
This is PUBLIC DOMAIN (see public domain release statement below).
- $Id: jonesforth.S,v 1.43 2007-10-10 13:01:05 rich Exp $
+ $Id: jonesforth.S,v 1.47 2009-09-11 08:33:13 rich Exp $
gcc -m32 -nostdlib -static -Wl,-Ttext,0 -Wl,--build-id=none -o jonesforth jonesforth.S
*/
- .set JONES_VERSION,43
+ .set JONES_VERSION,47
/*
INTRODUCTION ----------------------------------------------------------------------
pop %eax
pop %ebx
pop %ecx
+ push %ebx
push %eax
push %ecx
- push %ebx
NEXT
defcode "-ROT",4,,NROT
pop %eax
pop %ebx
pop %ecx
+ push %eax
+ push %ecx
+ push %ebx
+ NEXT
+
+ defcode "2DROP",5,,TWODROP // drop top two elements of stack
+ pop %eax
+ pop %eax
+ NEXT
+
+ defcode "2DUP",4,,TWODUP // duplicate top two elements of stack
+ mov (%esp),%eax
+ mov 4(%esp),%ebx
+ push %ebx
+ push %eax
+ NEXT
+
+ defcode "2SWAP",5,,TWOSWAP // swap top two pairs of elements of stack
+ pop %eax
+ pop %ebx
+ pop %ecx
+ pop %edx
push %ebx
push %eax
+ push %edx
push %ecx
NEXT