当前位置: 首页 > 知识库问答 >
问题:

为什么一条指令不能在汇编中包含两个内存引用?

石正信
2023-03-14
movl (%eax) (%ebx)  

共有1个答案

益银龙
2023-03-14

指令集要求设计位模式来编码指令。我们可以为每一条可以想到的指令都有位模式,但这样处理器就无法实际地构造了。因此,处理器设计者限制指令的种类(因此通常是样式),以使处理器的构造更容易。

处理器设计中的一个常见主题是指令在一个寄存器和一个存储位置上操作。两个操作数意味着这种样式可以加载内存到寄存器,将寄存器存储到内存,以及各种常见的二进制操作,如将内存添加到寄存器,将寄存器与内存进行比较等。这种主题在实践中非常有效,几乎不需要在多个内存位置上工作的指令,而且它的规律性使CPU的“中央”处理部分更容易实现。您提到的“MOVL”指令符合这个主题,因此,只有一个内存操作数。

所以真正的答案是,拥有这样一个指令的回报并不能证明工程是合理的。

 类似资料:
  • 对于以下功能... ...为什么含O2的ARM gcc 6.3.0会产生以下组件? 编译器似乎正在使用两个移位来屏蔽不需要的字节,而不是使用逻辑AND。编译器是否可以使用

  • 我有两段代码,它们从gdb转储中生成了以下装配线指令。 然后是这段代码。 可以看出,唯一的区别是这条线的位置: 在一个版本中,它在循环内部,在另一个版本中,它在循环外部。我期望循环内部较少的版本运行得更快,然而它却运行得更慢。 这是为什么呢? 如果相关,以下是我自己实验的细节以及产生它的c代码。 我在运行红帽企业 Linux 工作站(版本 7.5)或 Windows 10 的多台计算机上对此进行了

  • 9.5 条件汇编伪指令 条件汇编伪指令是告诉汇编程序:根据某种条件确定一组程序段是否加入到目标程序中。使用条件汇编伪指令的主要目的是:同一个源程序能根据不同的汇编条件生成不同功能的目标程序,增强宏定义的使用范围。 条件汇编伪指令与高级语言(如:C/C++)的条件编译语句在书写形式上相似,在所起作用方面是完全一致的。 9.5.1 条件汇编伪指令的功能 条件汇编伪指令的一般格式如下: IFnnnn 条

  • #include <stdio.h> int global_var; void change_var(){ global_var=100; } int main(void){ change_var(); return 0; } 技巧 通常给函数打断点的命令:“b func”(b是break命令的缩写),不会把断点设置在汇编指令层次函数的开头,例如: (gdb) b m

  • 问题内容: 仅当我删除指令之一即ng-app-demo1和模型时,我才获得输出。为什么我不能同时工作两个ng-app。我是Angular JS的新手,并建立了自己的基础知识。如果一次运行一个指令,我将获得所需的输出。因此,在此示例中,如果我删除了演示ng- app,脚本和控制器,则会得到所需的输出。如果删除demo1 ng-app脚本和控制器,则第一部分工作正常。如何使两个指令同时工作? 输出是

  • 伪指令 DW 定义字(2字节). PROC 定义过程. ENDP 过程结束. SEGMENT 定义段. ASSUME 建立段寄存器寻址. ENDS 段结束. END 程序结束.