一部逆アセンブル結果がおかしいところがあったので(即値が0x100ぶんだけずれてる)、こんな感じで新しく関数を作ってみた。
dispimm xs x | xs < 0x80 || x < 0x100 = "0x" ++ hex x | xs > 0x80 && x < 0x1000 = "0x" ++ hex ((x + 0xf00) .&. 0xfff) | xs > 0x80 && x < 0x10000 = "0x" ++ hex ((x + 0xff00) .&. 0xffff)
あとは、一部即値の符号計算対応など。