Assembly 英特尔x86汇编中的算术指令

Assembly 英特尔x86汇编中的算术指令,assembly,x86,Assembly,X86,我是x86汇编的新手。我试图用最少的指令数在x86汇编中编写以下指令 将ESP的内容乘以4,再加上0x11233344,将结果存储在EDI中。将EAX的内容乘以9,再加上0x55667788,将结果存储在EBX中。将两个结果相加,并将结果存储在ECX中 这就是我到目前为止所做的: mov edi, esp lea edi, [edi*4+0x11233344] lea ebx, [eax*9+0x55667788] add ebx, edi mov ecx, e

我是x86汇编的新手。我试图用最少的指令数在x86汇编中编写以下指令

将ESP的内容乘以4,再加上0x11233344,将结果存储在EDI中。将EAX的内容乘以9,再加上0x55667788,将结果存储在EBX中。将两个结果相加,并将结果存储在ECX中

这就是我到目前为止所做的:

mov edi,  esp           
lea edi,  [edi*4+0x11233344]
lea ebx,  [eax*9+0x55667788]
add ebx,  edi 
mov ecx,  ebx 

我试图用在线汇编程序检查该指令,它表明leaebx[eax*9+0x55667788]是一条无效指令。我该如何解决这个问题

内存操作数中的刻度只能是1、2、4和8中的一个。找到一种不同的方法将eax与9相乘。例如,您可以使用
[eax+eax*8+0x55667788]
。使用编译器编译一个函数,该函数使用2个寄存器参数来查找适用于
的指令模式,返回x*4+const1+x*9+const2
,然后根据您想要使用的regs进行调整。顺便说一句,一些汇编器(我认为像NASM)会接受
eax*9
,并将其拆分为base=eax,index=eax,scale factor=8。正如我在回答时所说,比例因子是2位移位计数。(又是你,还是其他人参加了相同的课程?)为什么你用
add
修改EBX,而不是使用另一个LEA添加两个寄存器,然后复制到ECX?在前面的部分中,您已经了解了如何使用LEA,
LEA ecx,[ebx+edi*1]
似乎是显而易见的下一步,最好按照说明确定要使用哪个寄存器。