Assembly 哪个汇编语言语句执行得更快?

Assembly 哪个汇编语言语句执行得更快?,assembly,x86,Assembly,X86,我正在学习x86上的汇编语言,遇到了一个问题,下面哪个更快,为什么 ADD AX, 100 ADD AX, BX 书中的答案是第二个,但我认为第二个需要先读一个寄存器,第一个可以直接添加。有人能告诉我答案吗?这取决于上下文(程序的其余部分) 第二条指令引入了数据依赖关系,如果您必须从主存加载BX,那么您可能需要暂停很长时间。另一方面,第一条指令增加了数据占用,因此需要指令缓存中更多的空间来编码立即数值,如果它刚好足以在一些性能关键的循环中造成一些额外的未命中,那么这可能是非常关键的 除

我正在学习x86上的汇编语言,遇到了一个问题,下面哪个更快,为什么

ADD AX, 100 

ADD AX, BX  
书中的答案是第二个,但我认为第二个需要先读一个寄存器,第一个可以直接添加。有人能告诉我答案吗?

这取决于上下文(程序的其余部分)

第二条指令引入了数据依赖关系,如果您必须从主存加载BX,那么您可能需要暂停很长时间。另一方面,第一条指令增加了数据占用,因此需要指令缓存中更多的空间来编码立即数值,如果它刚好足以在一些性能关键的循环中造成一些额外的未命中,那么这可能是非常关键的

除此之外,现在有一些CPU可以执行寄存器复制而不执行任何操作(只需使用寄存器重命名),因此这也取决于您使用的确切微体系结构

我的建议是——找另一本书,一本不想告诉你将永远发生什么的书。此外,使用AX和BX意味着它相当陈旧…

它取决于上下文(程序的其余部分)

第二条指令引入了数据依赖关系,如果您必须从主存加载BX,那么您可能需要暂停很长时间。另一方面,第一条指令增加了数据占用,因此需要指令缓存中更多的空间来编码立即数值,如果它刚好足以在一些性能关键的循环中造成一些额外的未命中,那么这可能是非常关键的

除此之外,现在有一些CPU可以执行寄存器复制而不执行任何操作(只需使用寄存器重命名),因此这也取决于您使用的确切微体系结构

我的建议是——找另一本书,一本不想告诉你将永远发生什么的书。此外,使用AX和BX意味着它相当陈旧…

它取决于上下文(程序的其余部分)

第二条指令引入了数据依赖关系,如果您必须从主存加载BX,那么您可能需要暂停很长时间。另一方面,第一条指令增加了数据占用,因此需要指令缓存中更多的空间来编码立即数值,如果它刚好足以在一些性能关键的循环中造成一些额外的未命中,那么这可能是非常关键的

除此之外,现在有一些CPU可以执行寄存器复制而不执行任何操作(只需使用寄存器重命名),因此这也取决于您使用的确切微体系结构

我的建议是——找另一本书,一本不想告诉你将永远发生什么的书。此外,使用AX和BX意味着它相当陈旧…

它取决于上下文(程序的其余部分)

第二条指令引入了数据依赖关系,如果您必须从主存加载BX,那么您可能需要暂停很长时间。另一方面,第一条指令增加了数据占用,因此需要指令缓存中更多的空间来编码立即数值,如果它刚好足以在一些性能关键的循环中造成一些额外的未命中,那么这可能是非常关键的

除此之外,现在有一些CPU可以执行寄存器复制而不执行任何操作(只需使用寄存器重命名),因此这也取决于您使用的确切微体系结构


我的建议是——找另一本书,一本不想告诉你将永远发生什么的书。此外,使用AX和BX意味着它相当陈旧…

在较旧的80X86 CPU中,需要从内存中读取操作数的立即数值,而寄存器操作数是在指令本身中编码的,指令本身已经被“读取”。所以

add ax, bx
只有一条指令;读过之后,所有需要的东西都在CPU内部,可以立即处理

指令

add ax, 100
被解析为
add ax,?
,因此CPU需要从内存中读取下一个字才能继续


新CPU不再如此,但OP所指的书(其标题和出版日期未提及)可能已经足够老了。

在旧的80X86 CPU中,需要从内存中读取操作数的立即数值,而寄存器操作数在指令本身中编码,指令本身已经“读取”。所以

add ax, bx
只有一条指令;读过之后,所有需要的东西都在CPU内部,可以立即处理

指令

add ax, 100
被解析为
add ax,?
,因此CPU需要从内存中读取下一个字才能继续


新CPU不再如此,但OP所指的书(其标题和出版日期未提及)可能已经足够老了。

在旧的80X86 CPU中,需要从内存中读取操作数的立即数值,而寄存器操作数在指令本身中编码,指令本身已经“读取”。所以

add ax, bx
只有一条指令;读过之后,所有需要的东西都在CPU内部,可以立即处理

指令

add ax, 100
被解析为
add ax,?
,因此CPU需要从内存中读取下一个字才能继续


新CPU不再如此,但OP所指的书(其标题和出版日期未提及)可能已经足够老了。

在旧的80X86 CPU中,需要从内存中读取操作数的立即数值,而寄存器操作数在指令本身中编码,指令本身已经“读取”。所以

add ax, bx
只有一条指令;读过之后,所有需要的东西都在CPU内部,可以立即处理

指令

add ax, 100
被解析为
add ax,?
,因此CPU需要从内存中读取下一个字才能继续

这对于新的CPU不再适用,但OP所指的书(其标题和出版日期未提及)可能