それはね、
例えば以下の場合は、
asm("movb %%dx,$0x3fah");
   ↓
asm("movb %dx,$0x3fah");
にしなきゃいけない。

レジスタに'%%'のように2重に指定するのは、
引数をとるような拡張gasを書いた場合なのさ。
引数がいらないような場合は、%は1つでいい。