Have you read about Execute Disable Bit in Intel Processors? Intel says:

Execute Disable Bit: This feature, combined with a
supported operating system, allows memory to be marked
as executable or non-executable. If code attempts to run in
non-executable memory the processor raises an error to the
operating system.

Also there is Data Execution Prevention (DEP) in Windows already which work well on Intel processors.

I have tried it myself on a Pentium D processor with DEP turned ON. When any attempt to execute data in memory is made, the program crashes.

Shreyas Zare