If you can undertstand assembly first, it will make it much easier to understand certain aspects of C - but assembly language is much more difficult to learn, and much more time-consuming, than C is. Virtually anyone would tell you that it would be better to get a solid grasp of C before going into assembly language.
However, crank that I am, I would suggest assembly first - but only if you can get a particular book,
Assembly Language Step by Step by Jeff Duntemann. It is an unusually well-written introductory book, better than just about any book I know of for
any programming language. It isn't a very complete book - it ends just at the point where it seems to be taking off, in fact - but it does give excellent explanations of several difficult concepts, especially the x86 memory segmentation scheme.
One of the problems with C is that there are a lot of lousy books out there about it. The ones I'd recommend are
The Waite Group's C Primer Plus (the book I first learned from, back in the first edition; I can't speak for the later editions, and it's now out of print anyway), and
Practical C Programming, with
K&R as a reference. I'm sure you'll get plenty of other recommendations, one or more of which will probably be a good fit for you.
For more advice, check the book thread. Don't forget to look into other styles of language, too - though if you already know some Perl, then you're on to a good start with that already. The more different languages and styles you know, IMAO, the better an programmer you are overall.
I'd better wrap this up before I start rambling on about
Scheme,
Smaltalk and
Python... oops, too late. Hey, at least I didn't mention the
Jargon File yet...DAMN!!!