What happens with CPU registers when function call yield?

It's like context switching but without touching kernel? And it's save all CPU registers?

Am I right understand that main different with Go, that Go automatically do routines switching, while in D programmer should call yield?