retレジスタをいじるためアセンブラでしか書けません。現在実行しているスレッドのレジスタの値を保存するために、現在のスレッドのスタックに現在のスレッドのレジスタを保存しています。現在のスタックポインタを現在のスレッドの構造体に保存し、次に実行するスレッドのスタックポインタを読み出します。するとここでスタックが切り替わるため、次に実行するスレッドのスタックから次に実行するスレッドのレジスタを読み出すことができます。次に実行するスレッドのレジスタをスタックから読み出します。読み出し、次のスレッドにジャンプします。どこにジャンプするのか?これは少しややこしいですので説明します。呼ばれた瞬間のスタックが属するスレッドをAt、次に実行するスレッドをBtとします。切り替わったときにスタックがBtのものに切り替わります。