What do you mean by prerequisites? If you want to do kernel dev you just read a book about it. I don't think there are prerequisites. Of course it is a large topic and it would help to learn how cpus work.
There are things that aren't expressible in C such as how to change from 32 bit to 64 bit mode on an x86 processor. That kind of thing is best done in x86 assembly. Most of a kernel can be written in C though.
Also, C depends on having an environment in place (such as having a stack for local variables and a data section for global variables). An OS needs to be able to run from before those things exist.
read some articles and blogs , looks like assembly is not as tough as you see it, obviously you need to write more code but if you understand pointers , its easy , isnt it? Or Am I missing some nasty part of it?