如何打印寄存器中的长整数?

时间:2013-10-02 21:53:01

标签: memory assembly

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

  
    

memTotal:.long 0

  

然后,我正在添加这样的东西:

  
    

addl 12(%di),%ecx

  

然后我将%ecx移至memTotal。我的问题是,我将如何计算memTotal的MB大小。我尝试了以下几点:

  
    

shrl $ 20,%eax

  

但是我怎么能在MB中打印那个?

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

1 个答案:

答案 0 :(得分:3)

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

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

获得数字值后,可以添加固定常量以获取其ASCII值,您可以使用该值来打印相应的字符。

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

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