-2

分母で割った剰余を基数 10 の分数として出力するものを作成しようとしています。

アラインされていないメモリ アクセスが気に入らないので、レジスタを使用して、計算された最後の 8 桁をバッファリングします。

ただし、バッファを出力に直接書き込む方法が見つかりませんでした。

バッファをメモリに移動してそれを書き込むことができることはわかっていますが、私はそれをしたくありません。

レジスタの値をファイルに直接書き込む方法はありますか?

64 ビット Ubuntu で gcc-4.7 を使用して C++ でインライン アセンブリを使用しています。

編集:

信じられないほど馬鹿げた質問をしてしまい、大変申し訳ありません。

私はインラインアセンブリをいじっていて、生成した出力をバイト単位で出力に効率的に書き込もうとしました。生成されたバイトを単一のレジスタにシフトし、そのレジスタをメモリに格納し、そのメモリ アドレスの 8 バイトを出力に書き込むことでこれを試みました (ただし、これがエンディアン互換かどうかはわかりません)。

この質問をするときに念頭に置いていたのは、どういうわけか「そのレジスタをメモリに保存する」ことを省略していたことです。最後に、8 バイトが含まれるたびにレジスタをバッファーに格納し、バッファーがいっぱいになると、一度に 8 バイトではなくバッファー全体を出力しました。

これにより、私の一見奇妙な質問の背後にある理由が明確になることを願っています。

4

1 に答える 1

2

「レジスタの値を直接ファイルに書き込む方法はありますか?」

いいえ。

「アラインされていないメモリ アクセスが怖いので、レジスタを使用して、計算された最後の 8 桁をバッファリングします。」

コンピュータが敵対的であるという前提でコンピュータ プログラムを作成することはできません。プログラムを書くためには、コンピュータが規則的で予測可能な方法で動作すると仮定する必要があります。

あなたの場合、アラインされていないアクセスができないようにプログラムを書く必要があります。あなたはアセンブラーで書いているので、これはあなたの責任であり、コンパイラーの責任ではありません。

于 2012-10-03T13:39:11.930 に答える