コードセグメント(CS)レジスタを設定するためにファージャンプを使用することを考えていました。なぜ私がこれを行っているのか、なぜセグメンテーションを扱っているのかを理解するにはしばらく時間がかかるので、それは学問的な課題と考えてください。構文を正しく理解できないようです。
Error: suffix or operands invalid for 'ljmp'
cs
別のレジスタに入れるのはばかげていることはわかっていますが、使用が機能し%0
ていなかったので試してみることにしました(ax
レジスタも機能しません)。
正常にコンパイルされるコードを見ていますが、同じだと思っていたので、これは私を夢中にさせていljmp
ます:__asm volatile ( "lcall $0x8, $far_call" );
もちろん、CS レジスタに影響を与える他のハッキーな方法を歓迎します。
void set_cs(u16 cs) {
__asm__ volatile (
"mov %0, %%ax \n\t"
"ljmp %%ax, $fake_label \n\t"
"fake_label: \n\t"
:
: "r" (cs)
: "ax"
);
}