It largely depends on what you plan do with the degree. It appears that most CS majors end up as software engineers of some kind. With that in mind, I am really not sure why more people don't just major in software engineering. I suspect that there are not enough software engineering programs available especially at public institutions.
I come from an embedded back ground. Every single person that I work with either had a EE degree or CE degree and that is partially because the when the "old guys" when to college there weren't that many CE programs available. So, it is pretty obvious that if you want to work in the embedded field that a hardware background is desirable.
Regardless of the field you want to work in however, I believe that every programmer should take a course in assemble programing. You might never user it, but it will teach exactly what is happening at the processor level during a function call, how interrupts are handled, how memory is structured or how the different addressing modes are used. I believe all this things will make you a better programmer.
Also, though it may not be apparent so some these are all important topics when considering Data Structures and Algorithms for a specific platform.