How to get 16 byte aligned address in assembly

assembly, fpu, memory-address, memory-alignment, stack

Solution

Using intel style syntax:

    push    ebp             ;save ebp
    mov     ebp,esp         ;save esp in ebp
    and     esp,0fffffff0h  ;round esp down to 16 byte boundary
    sub     esp,128         ;allocate multiple of 16 bytes

Problem

I have to save floating-point registers into the stack. I tried to use fsave instruction. I do the following: ``` fsave (%esp) ``` But as an argument fsave uses 16 byte aligned address. I don't have an idea how to make address in %esp be 16 byte aligned.

Original source