new file mode 100644
--- /dev/null
+++ b/asm/get_sp.asm
@@ -0,0 +1,51 @@
+;;
+;; $ID$
+;; $Source: /development/c/asm/get_sp.asm,v $
+;;
+;;
+
+%include "asm/tools.inc"
+
+segment .data
+label1 db "NASM Powered...", 10, 0
+reg_format db "EAX=%08x EBX=%08x ECX=%08x EDX=%08x", 10, 0
+st_format db "EBP=%08x ESP=%08x ESI=%08x EDI=%08x", 10, 10, 0
+trace_fmt db "[EBP-20] = %08x", 10, \
+ "[EBP-16] = %08x", 10, "[EBP-12] = %08x", 10, \
+ "[EBP- 8] = %08x", 10, "[EBP- 4] = %08x", 10, \
+ "[EBP+ 0] = %08x", 10, "[EBP+ 4] = %08x", 10, \
+ "[EBP+ 8] = %08x", 10, "[EBP+12] = %08x", 10, \
+ "[EBP+16] = %08x", 10, "[EBP+20] = %08x", 10, 10, 0
+
+segment .bss
+ savexp resd 1 ;; uninitialized dword value
+ ;; currently not used
+
+segment .text
+ global get_sp
+
+get_sp:
+ enter 4,0 ;; push ebp ;; Save Base-Pointer
+ ;; mov ebp, esp ;; Copy Stackpointer for !!local usage!!
+ ;; sub esp, 4 ;; Make room for 1 DWORD
+
+ mov [ebp-4], esp ;; Store result in !! local variable !!
+
+ push DWORD label1
+ call printf
+ add esp, byte 4 ;; remove label1 from stack
+
+ call stack_trace
+
+ call reg_info
+ call stack_info
+
+ call reg_info
+ call stack_info
+
+ call stack_trace
+
+ ;; clean up
+ mov eax, [ebp-4] ;; return local var
+ leave ;; mov esp, ebp pop ebp
+ ret ;; return eax