x64 assembly clearmem / zeromem
The comments in the clearmem procedure for the Linux block look a bit confusing.  You could just have a summary of the procedure commented above, and have the individual comments for each line specify the meaning of the assembly instructions.

Specifically, the lines that describe the C++ code don't quite reflect on the assembly code.  clearmem itself doesn't take two arguments.  The for loop comment statement doesn't seem needed, and it may be clearer to specify when the loop should exit.  You also don't need the obvious comment for ret.
Since it appears the extern "C" corresponds to clearmem, I assume everything else can fully utilize C++.  If so, I'd use std::vector in place of the C-style arrays.  However, since clearmem performs pointer arithmetic, you should use std::vector::data() to pass in the underlying dynamic array.

You can then call size() for the vector object in main() instead of using sizeof.  This function returns an std::size_type, specifically std::vector&lt;int&gt;::size_type.
I'm not sure how print_array() is implemented, but I assume it just uses a for loop to print the array elements.  You might also not need the template argument, and with just a vector, you'll have just one argument.  In the function's loop, you should then use const_iterators for displaying the elements, although using indices is okay (but iterators are still preferred).
clearmem should take size_t instead of long; the former is the same type returned by the sizeof operator.