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 |