asm/get_sp.asm
changeset 166 ecd6492274ad
parent 9 c3fecc82ade6
equal deleted inserted replaced
165:f551b78c3eee 166:ecd6492274ad
     5 
     5 
     6 %include "asm/tools.inc"
     6 %include "asm/tools.inc"
     7 
     7 
     8 segment .data
     8 segment .data
     9 label1  	db  			"NASM Powered...", 10, 0
     9 label1  	db  			"NASM Powered...", 10, 0
    10 reg_format	db				"EAX=%08x EBX=%08x ECX=%08x EDX=%08x", 10, 0
    10 reg_format	db			"EAX=%08x EBX=%08x ECX=%08x EDX=%08x", 10, 0
    11 st_format	db				"EBP=%08x ESP=%08x ESI=%08x EDI=%08x", 10, 10, 0
    11 st_format	db			"EBP=%08x ESP=%08x ESI=%08x EDI=%08x", 10, 10, 0
    12 trace_fmt	db				"[EBP-20] = %08x", 10, \
    12 trace_fmt	db			"[EBP-20] = %08x", 10, \
    13 							"[EBP-16] = %08x", 10, "[EBP-12] = %08x", 10, \
    13 					"[EBP-16] = %08x", 10, "[EBP-12] = %08x", 10, \
    14 							"[EBP- 8] = %08x", 10, "[EBP- 4] = %08x", 10, \
    14 					"[EBP- 8] = %08x", 10, "[EBP- 4] = %08x", 10, \
    15 							"[EBP+ 0] = %08x", 10, "[EBP+ 4] = %08x", 10, \
    15 					"[EBP+ 0] = %08x", 10, "[EBP+ 4] = %08x", 10, \
    16 							"[EBP+ 8] = %08x", 10, "[EBP+12] = %08x", 10, \
    16 					"[EBP+ 8] = %08x", 10, "[EBP+12] = %08x", 10, \
    17 							"[EBP+16] = %08x", 10, "[EBP+20] = %08x", 10, 10, 0
    17 					"[EBP+16] = %08x", 10, "[EBP+20] = %08x", 10, 10, 0
    18 
    18 
    19 segment .bss
    19 segment .bss
    20 	savexp resd 1			;; uninitialized dword value
    20 	savexp resd 1			;; uninitialized dword value
    21 							;; currently not used
    21 					;; currently not used
    22 
    22 
    23 segment .text
    23 segment .text
    24 	global get_sp
    24 	global get_sp
    25 
    25 
    26 get_sp:
    26 get_sp:
    27 	enter 4,0				;; push ebp		;; Save Base-Pointer
    27 	enter 4,0			;; push ebp		;; Save Base-Pointer
    28 							;; mov ebp, esp ;; Copy Stackpointer for !!local usage!!
    28 					;; mov ebp, esp ;; Copy Stackpointer for !!local usage!!
    29 							;; sub esp, 4   ;; Make room for 1 DWORD
    29 					;; sub esp, 4   ;; Make room for 1 DWORD
    30 
    30 
    31 	mov [ebp-4], esp		;; Store result in !! local variable !!
    31 	mov [ebp-4], esp		;; Store result in !! local variable !!
    32 
    32 
    33 	push DWORD label1
    33 	push DWORD label1
    34 	call printf
    34 	call printf
    44 
    44 
    45 	call stack_trace
    45 	call stack_trace
    46 
    46 
    47 	;; clean up
    47 	;; clean up
    48 	mov eax, [ebp-4]		;; return local var
    48 	mov eax, [ebp-4]		;; return local var
    49 	leave 					;; mov esp, ebp pop ebp
    49 	leave 				;; mov esp, ebp pop ebp
    50 	ret						;; return eax
    50 	ret				;; return eax