• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 686
  • Last Modified:

mov array[eax * 4], 0 /* when does multiply happen? */

I know this is not a C question, but maybe some assembly
guys look at this section.

In the assembly statement:

mov dword ptr array[eax * 4], 0

When does the eax register get multiplied by four?

Is the resulting index stored anywhere before it
is added to "array"?  I imagine that the result of
"eax * 4" must be stored somewhere, but where?

NOTE: If you want to see this for yourself, compile
this and look at the assembly that results:

int main()
      int array[50];
      int x = 5;

      array[x] = 0;

        return 0;
  • 2
1 Solution
mov dword ptr array[eax * 4], 0 is a standard 486 instruction using some of the more special types of addressing

you can look at some Assembler book for more details
(sorry if i'm wrong with terms - i'm just translating a Russian book)

mov eax, 123456h   - immediate addressing
mov eax, ecx  - registry addressing
mov eax, [123456h] - absolute addressing
mov eax, [ecx] + 123456h - indexed addressing with offset
mov eax, [esi*4] + 1234h - indexed addressing with scaling and offset
mov eax, [ebx][edi*2] + 12345h - base index with scaling and offset addressing

so you have ' indexed addressing with scaling and offset'. this is a standard addressing mode in 386+ (or 486+) processors.

hope this helps

you have the following algorithm for calculating the real addres (and maybe it works only in P-mode ?? )

address = offset + [data at base address] + value of index register * multiplier (+base of the segment :).
multiplier can be 1,2,4 or 8 (there are two bits in the instruction opcode reserved for it)

your example
 dword ptr array[eax * 4]
doesn't have a base addres - you have just indexed array
calculated address = offset +  value of index register * multiplier
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Never miss a deadline with monday.com

The revolutionary project management tool is here!   Plan visually with a single glance and make sure your projects get done.

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now