Assembly 如何计算汇编代码所需的内存?

Assembly 如何计算汇编代码所需的内存?,assembly,operating-system,x86,Assembly,Operating System,X86,这是Breaked thorn操作系统开发系列中的一段。有3行代码。加载到第二行需要512字节,加载到第三行需要514字节。我们如何计算呢?如果可能,请给我一个链接,我可以阅读它的细节。提前谢谢 在汇编语言中,我们可以 轻松超越512字节标记。 所以,代码看起来很好, 但只有一部分会在 记忆力例如,共析如下: 在汇编语言中,执行 从文件的顶部开始 向下地但是要记住,, 在内存中加载文件时,我们 加载扇区。每一个 扇区是512字节,因此它只会 将文件的512字节复制到 记忆 如果执行了上述代码,并

这是Breaked thorn操作系统开发系列中的一段。有3行代码。加载到第二行需要512字节,加载到第三行需要514字节。我们如何计算呢?如果可能,请给我一个链接,我可以阅读它的细节。提前谢谢

在汇编语言中,我们可以 轻松超越512字节标记。 所以,代码看起来很好, 但只有一部分会在 记忆力例如,共析如下:

在汇编语言中,执行 从文件的顶部开始 向下地但是要记住,, 在内存中加载文件时,我们 加载扇区。每一个 扇区是512字节,因此它只会 将文件的512字节复制到 记忆

如果执行了上述代码,并且只有第一个扇区 已加载到内存中,它将仅 复制到512字节(inc bx 指示)。所以,当最后一部电影 指令仍在磁盘上,它不是 在记忆中!。 那么处理器在inc bx之后会做什么呢?这将是一场灾难 继续到514字节。就这样 未在内存中,它将执行 我们的档案已经结束了!结局 后果撞车


这个例子令人困惑。前两条指令只占用几个字节。作者假设
incbx
位于第512字节。通常,您必须组装代码才能知道x86将有多大,因为操作码的长度不同(从1到7字节[*])。您可以在代码前后放置一个标签,然后减去它们以知道它有多大

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


[*]我希望有几封回复,其中一封会用冗长的x86前缀指令相互补充…

这个例子令人困惑。前两条指令只占用几个字节。作者假设
incbx
位于第512字节。通常,您必须组装代码才能知道x86将有多大,因为操作码的长度不同(从1到7字节[*])。您可以在代码前后放置一个标签,然后减去它们以知道它有多大

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


[*]我希望有几个回复,一个回复,一个回复,另一个回复,带有冗长的x86前缀指令…

用汇编语言编写的代码被转换成处理器指令,由CPU解释。根据Itel x86规范,指令可以是可变长度的


我不确定这个答案是否完全正确,但所需的内存可能表示所有汇编指令的总大小(以字节为单位),以及应用程序加载的任何数据。用汇编语言编写的代码被转换为处理器指令,由CPU解释。根据Itel x86规范,指令可以是可变长度的


我不确定这个答案是否完全正确,但所需内存可能表示所有汇编指令的总大小(以字节为单位),以及应用程序加载的任何数据。为
引导扇区
(其大小为512字节)编写代码时,必须注意最多使用512字节(准确地说是510字节,因为最后两个字节用作签名)

编辑:这3条指令有3、1和3(或2?)字节。他在解释这个案例时,这个代码已经开始在大偏移量


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

这篇文章是关于引导加载程序的。为
引导扇区
(其大小为512字节)编写代码时,必须注意最多使用512字节(准确地说是510字节,因为最后两个字节用作签名)

编辑:这3条指令有3、1和3(或2?)字节。他在解释这个案例时,这个代码已经开始在大偏移量


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

我知道。我的问题是他是如何计算512字节和514字节的?我知道。我的问题是他是如何计算512字节和514字节的?
mov ax, 4ch
inc bx ; 512 byte
mov [var], bx ; 514 byte