0

次のように長整数を定義しました。

memTotal: .long 0

次に、次のようなものを追加しています。

addl 12(%di), %ecx

次に、%ecx を memTotal に移動します。私の質問は、memTotal のサイズを MB 単位で計算するにはどうすればよいかということです。私は次の行に沿って何かを試しました:

shrl $20、%eax

しかし、MB の int のように出力するにはどうすればよいでしょうか。

私は正しい軌道に乗っていますか?どんな助けでも大歓迎です。

4

1 に答える 1

3

単一の ASCII 文字を印刷する方法を知っていると仮定します。したがって、整数から数字を抽出するアルゴリズムが必要ですa-理解しやすく、拡張しやすいと思われるアルゴリズムを提供します(必ずしも最適ではありません)。

  • 計算しb := a%10ます。bあなたの番号の最後の桁です
  • セットa := a/10(整数除算)
  • 最初から最後から 2 番目の数字を取得するなどを繰り返しa == 0ます。

数字の値を取得したら、固定定数を追加してその ASCII 値を取得できます。これを使用して、対応する文字を出力できます。

上記により、数値を印刷できます。残念ながら、現時点では逆方向にしか印刷できません。これを修正するには、数字を右から左に配置できる文字列を割り当てます。すべてのlong intを保持するのに十分な大きさの文字列を割り当てることから始めます。次に、上記のアルゴリズムを変更して、桁数を追跡し、それに応じて文字列を割り当てます。

(もちろん、shrl $20, %eaxバイトを通常 MiB と呼ばれるものに変換するのは理にかなっているように思えます。規則はさまざまですが、通常は 1 MB = 10^6 バイト、1 MiB = 2^20 バイトだと思います。)

于 2013-10-02T22:55:34.010 に答える