Similarly, NASM will split
[eax*2]
into[eax+eax]
because that allows the offset field to be absent and space to be saved; in fact, it will also split[eax*2+offset]
into[eax+eax+offset]
.
You can combat this behaviour by the use of theNOSPLIT
keyword:[nosplit eax*2]
will force[eax*2+0]
to be generated literally.
[nosplit eax*1]
also has the same effect. In another way, a split EA form[0, eax*2]
can be used, too. However,NOSPLIT
in[nosplit eax+eax]
will be ignored because user’s intention here is considered as[eax+eax]
.
lea eax, [NOSPLIT 1+rax*2]
lea eax, [1+rax*2]
00000000 8D044501000000 lea eax,[rax*2+0x1]
00000007 8D440001 lea eax,[rax+rax+0x1]