0

我定义了一个长整数,如下所示:

内存总计:.long 0

然后,我用这样的东西添加它:

添加 12(%di), %ecx

然后我将 %ecx 移动到 memTotal。我的问题是,我将如何计算 memTotal 的 MB 大小。我尝试了一些类似的东西:

shrl $20, %eax

但是我将如何将它打印为 int for MB?

我在正确的轨道上吗?任何帮助表示赞赏。

4

1 回答 1

3

我假设您知道如何打印单个 ASCII 字符。所以现在你需要一种算法来从整数中提取数字a——我将提供一个我认为易于理解且易于扩展的算法(它不一定是最好的)。

  • 计算b := a%10b是您号码的最后一位
  • 集合a := a/10(整数除法)
  • 从头开始重复以获取倒数第二个数字等。当 时停止a == 0

一旦你有了一个数字的值,你可以添加一个固定的常量来得到它的 ASCII 值,你可以用它来打印相应的字符。

以上使您可以打印数字。不幸的是,此时您只能向后打印。为了解决这个问题,分配一个字符串,您可以在其中从右到左放置数字。首先分配一个足以容纳所有长整数的字符串,然后对上述算法进行修改,以跟踪有多少位,并相应地分配一个字符串。

(是的,shrl $20, %eax将字节转换为通常称为 MiB 的内容听起来很明智。约定各不相同,但我认为通常的约定是 1 MB = 10^6 字节,1 MiB = 2^20 字节。)

于 2013-10-02T22:55:34.010 回答