我已经定义了一个长整数,如下所示:
memTotal:.long 0
然后,我正在添加这样的东西:
addl 12(%di),%ecx
然后我将%ecx移至memTotal。我的问题是,我将如何计算memTotal的MB大小。我尝试了以下几点:
shrl $ 20,%eax
但是我怎么能在MB中打印那个?
我是否在正确的轨道上?任何帮助表示赞赏。
答案 0 :(得分:3)
我假设您知道如何打印单个ASCII字符。所以现在你需要一个算法从整数a
中提取数字 - 我会提供一个我认为易于理解且易于扩展的数字(它不一定是 best )。
b := a%10
。 b
是您号码的最后一位数a := a/10
(整数除法)a == 0
时停止。获得数字值后,可以添加固定常量以获取其ASCII值,您可以使用该值来打印相应的字符。
以上功能可以打印数字。不幸的是,此时你只能向后打印它。为了解决这个问题,请分配一个字符串,您可以在其中将数字从右向左放置。首先分配一个足以容纳所有长整数的字符串,然后对上述算法进行修改,以跟踪有多少位数,并相应地分配一个字符串。
(是的,shrl $20, %eax
听起来很容易将字节转换成通常称为MiB的字符。约定各不相同,但我认为通常的是1 MB = 10 ^ 6字节,1 MiB = 2 ^ 20字节。)