-
May 4th, 2013, 04:29 PM
#1
Consider the following code (help please)
Im working on some homework and have gotten stuck.
Here is the problem I am working on.
Consider the following source code, where R, S, and T are constants declared with
Code:
#define:
int A[R][S][T];
int store_ele(int i, int j, int k, int *dest)
{
*dest = A[i][j][k];
return sizeof(A);
}
In compiling this program, gcc generates the following assembly code:
i at %ebp+8, j at %ebp+12, k at %ebp+16, dest at %ebp+20
1 movl 12(%ebp), %edx
2 leal (%edx,%edx,4), %eax
3 leal (%edx,%eax,2), %eax
4 imull $99, 8(%ebp), %edx
5 addl %edx, %eax
6 addl 16(%ebp), %eax
7 movl A(,%eax,4), %edx
8 movl 20(%ebp), %eax
9 movl %edx, (%eax)
10 movl $1980, %eax
A. Extend Equation 3.1 from two dimensions to three to provide a formula for
the location of array element A[i][j][k].
B. Use your reverse engineering skills to determine the values of R, S, and T
based on the assembly code.
I kind of know how to read this, I know that they are all being stored as a group under A, and j gets moved to the edx register in line 1.
However when it comes to the actual questions I dont know what it means by Extend equation 3.1 or how to come up with a formula for the location of A[i][j][k]. To me it appears that the final value is moved to the eax register in the last line.
Moving on to B, I do not know how to tell which values are corresponding to R, S, and T because you are not give initial locations of these variables.
Any answers, suggestions, or assistance would be greatly appreciated, thank you very much for your time and help.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|