出力されたリスティングファイルを見ていきます。
まずトランスピュータはROMブートする場合、最上位アドレス:0x7FFFFFFE番地から実行を開始するとあります。ですがここはアドレス終端まで2バイトしかありませんから置けるのはジャンプ命令、しかも2バイトで完結するコードになるので相対アドレスで±256バイト、つまり
j $+255 (is coded as pfix #F; j #F)
j $-256 (is coded as nfix #F; j #0)
の範囲に限定されます。前方に飛んでも内蔵RAM領域を越えられないので、いったん後方に256バイト戻ってROM内の0x7FFFFF00番地に飛ぶことにします。(ここならばオペランドが長くなっても大丈夫なので)ただしここでもコード領域は残り256バイトしかないため、ここを中継点としてさらにROM先頭:0x7FF80000番地へ大ジャンプさせます。
いちばん最初、テストのつもりで2回目の飛び先を外部RAMの先頭アドレス:0x00000000番地としたところ、アセンブル開始後なかなか終わらずTmasm.exe自体がフリーズしたのか?と思ったのですが十数秒後コマンドプロンプトに戻ってきたら、なんとHDD上に2Gbyteのバイナリファイルが出来上がってました。ちゃんと0x00000000~0x7FFFFFFFを埋めるファイルをコツコツと作ってくれたようです。
つづいてイミディエイトデータ部分の拡張の様子です。4ビット~32ビットについてはあらかじめ調べた通りpfix命令で拡張しています。
負数については-31と0xFFFFFFE1は同値のためアセンブラが最適化してnfix命令で同じコードを生成しました。
さらにコード拡張の様子を見るとopr命令、pfix命令で想定通りに展開されました。
ちょっと予想と違ったのはfpentry命令によるセレクターシーケンスです。これはアセンブラの仕様ということになりますがldc fpuabsの行はコードが生成されず、エラーすら出ていません。ここはfpuabsと直接コードを書くだけで全てのコードが展開されています。
ということでpfix,nfix,opr,fpentry命令は明示的に使わなくても良い、みたいです