【发布时间】:2017-10-16 19:53:25
【问题描述】:
[已编辑] 有人可以向我解释我们如何在这个问题中获得 M 和 N 的值,遍历相应汇编代码的每一行吗?
我总是对 movl array2 部分感到困惑。
M 和 N 是使用#define 定义的常量
#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];
}
如果上面的代码生成如下汇编代码:我们如何推导出常量 M 和 N 的值?
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
【问题讨论】:
-
您真的希望我们输入所有内容吗?不要发布代码图像!请解决您的问题。
-
为什么代码是图片???
-
你说“我们得到了 M 和 N 的值”是什么意思?你的意思是
i和j? -
#define M;=> 这不会编译 -
我认为#define指令不能包含在编译过程中,因为我们天生不知道它们的值,而汇编代码可能对它们的值有提示。
标签: c 32-bit disassembly