2010-11-04 97 views
1

这是一款来自破刺的操作系统开发系列。有三行代码。加载第二行需要512字节,第三行需要514字节。我们如何计算这个?如果可能,请给我一个链接,我可以详细阅读它。提前致谢。如何计算汇编代码所需的内存?

在汇编语言中,我们可以很容易地超越512字节的标记。 所以,代码可能看起来很好, 但只有一部分将在 内存。例如,coinsider这样:

mov ax, 4ch 
inc bx ; 512 byte 
mov [var], bx ; 514 byte 

汇编语言编写,执行 从文件 向下的顶部开始。不过请记住, 在内存中加载文件时,我们是 加载扇区。这些 扇区中的每一个都是512字节,所以它只会将 将512字节的文件复制到 的内存中。

如果在执行上面的代码,并且只有第一扇区 被加载到内存中,它只会 起来复制到512字节(INC BX 指令)。所以,虽然最后的mov 指令仍然在磁盘上,但它不在内存中! ! 处理器在inc bx之后会做什么?它将通过 继续到514字节。由于此 不在内存中,它会在我们的文件末尾执行 !结束 结果?崩溃。

回答

5

这个例子令人困惑。前两条指令只占用几个字节。笔者认为inc bx落在512字节。一般来说,您必须组装代码以知道x86将会有多大,因为操作码具有不同的长度(从大约7个字节[*]开始)。你可以在你的代码之前和之后放置一个标签,并减去它们以知道它有多大。

在其他体系结构(例如PowerPC)中,每条指令的大小相同,您可以对它们进行计数并乘以4并且非常接近。

[*]我期望几个回复一正在增加彼此前缀指令冗长的x86 ...汇编语言编写

+0

谢谢,我明白了。 – narayanpatra 2010-11-04 04:52:56

0

代码被转换成它们由CPU解释的处理器指令。根据Itel x86规范,指令可以是可变长度的。

我不知道,如果这个答案是完全CORRCT,但它煤层合理的,所需的内存将代表所有的汇编指令字节由应用

3

加载的总规模,以及任何数据文章是关于bootloader的。当您编写boot sector(其大小为512字节)的代码时,必须注意最多使用512个字节(准确地说,因为最后2个字节用作签名)。

编辑:这3条指令有3,1和3(或2?)个字节。当这段代码已经以大偏移量开始时,他正在解释这种情况。

计算代码大小的常用方法是在代码块周围的两个标签之间取差值。

+0

我知道。我的问题是关于他如何计算512字节和514字节? – narayanpatra 2010-11-04 04:54:46

+0

感谢您的解释。 – narayanpatra 2010-11-04 05:02:00