asm/get_sp.asm
author Markus Bröker <mbroeker@largo.dyndns.tv>
Sat, 13 Dec 2008 17:58:06 +0100
changeset 13 2640a7fd96ca
parent 9 c3fecc82ade6
child 166 ecd6492274ad
permissions -rw-r--r--
clear() is better than resize(0) committer: Markus Bröker <mbroeker@largo.homelinux.org>

;;
;;  test/demos/asm/get_sp.asm
;;	Copyright (C) 2008 Markus Broeker
;;

%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