Well I've been doing a lot of DirectX coding and let me tell you, assembly is still used. In fact my knowledge of assembly has helped me a lot in DirectX. Granted that the HEL probably performs what I want to do but just in case it does not I code my own.
For instance I coded my own bi-linear interpolation function for DirectX in assembly. Yes video cards do bi-linear interpolate but its always on textures which is no good for me. If you want to find the altitude of an object and you know the altitude of the four corners of the grid the object is in - and you know how far into the grid on x and y the object is, you can bi-linear interpolate to find the height of the object.
USHORT Bi_Linear(WORD v1,WORD v2,WORD v3,WORD v4,
double offset_x,double offset_y)
You could just as easily store final_value in the eax register to return it since this is where C looks for integral return values, but since I did this in inline assembly it looks more logical to use a return (and the compiler does not whine at me) instead of placing the correct value in the eax register (or st(0) for floating point values).
So assembly is not dead (might be used less in Direct3D, but I'm sure I'll still use some) - at least not for games where speed is the prime factor.