Assembly 程序集中有多个参数

Assembly 程序集中有多个参数,assembly,x86,gnu-assembler,Assembly,X86,Gnu Assembler,像这样的多个参数在x86程序集中做什么。例如,以下两个说明: mov-0x4(%edi,%esi,4),%eax lea(%edi,%esi,4),%ebx 我不愿意发布所有的汇编代码,因为这是一个大学项目,我的老师可能不希望我在网上发布。感谢您的帮助。第一条指令将地址(%edi+%esi*4)-4处的(32位)值加载到%eax中。第二条指令将%ebx设置为:(%edi+%esi*4)第一条指令将地址(%edi+%esi*4)-4处的(32位)值加载到%eax中。第二个选项将%ebx设置为:(%

像这样的多个参数在x86程序集中做什么。例如,以下两个说明:

mov-0x4(%edi,%esi,4),%eax

lea(%edi,%esi,4),%ebx


我不愿意发布所有的汇编代码,因为这是一个大学项目,我的老师可能不希望我在网上发布。感谢您的帮助。

第一条指令将地址
(%edi+%esi*4)-4
处的(32位)值加载到
%eax
中。第二条指令将
%ebx
设置为:
(%edi+%esi*4)
第一条指令将地址
(%edi+%esi*4)-4处的(32位)值加载到
%eax
中。第二个选项将
%ebx
设置为:
(%edi+%esi*4)

您查过操作码了吗?您查过操作码了吗?更一般地说,
置换(基、索引、标度)
是地址
基+标度*索引+置换
,经常(但不仅仅)用于访问数组
base
index
必须是寄存器值,
scale
displacement
是即时值。
scale
的唯一允许值是1、2、4或8。@houp-很难构造保证与特定指令相对应的C语句。这些指令经常出现在循环中,并且像Stephen提到的数组索引中。更一般地说,
位移(base,index,scale)
是地址
base+scale*index+displacement
,经常(但不仅仅)用于访问数组
base
index
必须是寄存器值,
scale
displacement
是即时值。
scale
的唯一允许值是1、2、4或8。@houp-很难构造保证与特定指令相对应的C语句。正如Stephen提到的,这些指令经常出现在循环和数组索引中。