[编辑] 有人可以向我解释在这个问题中,我们如何得到M和N的值,遍历相应汇编代码的每一行?反编译IA32 32位AT&T汇编代码中的一个函数C
我总是被困在movl array2部分。我们如何推导出常数M和N的值:
M和N常量使用#
#define M <some value>
#define N <some value>
int array1[M][N];
int array2[N][M];
int copy(int i, int j)
{
array1[i][j] = array2[j][i];
}
如果上述代码生成以下汇编代码中定义?
copy:
pushl %ebp
movl %esp, %ebp
pushl %ebx
movl 8(%ebp), %ecx
movl 12(%ebp), %ebx
leal (%ecx, %ecx, 8), %edx
sall $2, %edx
movl %ebx, %eax
sall $4, %eax
subl %ebx, %eax
sall $2, %eax
movl array2(%eax, %ecx, 4), %eax
movl %eax, array1(%edx, %ebx, 4)
popl %ebx
movl %ebp,%esp
popl %ebp
ret
你真的希望我们输入所有的?不要发布代码图片!请解决你的问题。 – ikegami
为什么代码为图像? –
当你说“我们得到M和N的值”时,你是什么意思?你的意思是'我'和'j'? – ikegami