Mirror, Mirror, in the Code
Python, 40 38 bytes
-2 bytes thanks to @MitchSchwartz (ord(d)+ord(m))%8 -&gt; ord(d)+ord(m)&amp;7

lambda d,m:' NESSWNW'[ord(d)+ord(m)&amp;7]

plain lookup of answer in a list (AKA string) indexed by the smallest mod of the sum of ordinals that works.
Test cases are on ideone