Solved

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

Posted on 1998-11-17
2
677 Views
Last Modified: 2012-06-27
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;
}
0
Comment
Question by:alfredj
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 2
2 Comments
 
LVL 16

Accepted Solution

by:
heyhey_ earned 50 total points
ID: 1178136
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
  heyhey



0
 
LVL 16

Expert Comment

by:heyhey_
ID: 1178137
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
0

Featured Post

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Written by John Humphreys C++ Threading and the POSIX Library This article will cover the basic information that you need to know in order to make use of the POSIX threading library available for C and C++ on UNIX and most Linux systems.   [s…
Introduction This article is a continuation of the C/C++ Visual Studio Express debugger series. Part 1 provided a quick start guide in using the debugger. Part 2 focused on additional topics in breakpoints. As your assignments become a little more …
The goal of the video will be to teach the user the concept of local variables and scope. An example of a locally defined variable will be given as well as an explanation of what scope is in C++. The local variable and concept of scope will be relat…
The viewer will be introduced to the technique of using vectors in C++. The video will cover how to define a vector, store values in the vector and retrieve data from the values stored in the vector.

696 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question