通过汇编代码推导C语言二维数组宏定义P和Q的值
从汇编代码推导C宏定义P和Q的值
我需要借助汇编代码推导宏定义P和Q的值,不清楚该如何着手,希望能得到分步讲解或逻辑说明。
给出的代码
C代码
#define P ? #define Q ? int mat1[P][Q]; int mat2[Q][P]; void copy_element( int i, int j) { mat1[ i ][ j ] = mat2[ j ][ i ]; }
汇编代码
copy_element: movslq %edi, %rdi movslq %esi, %rsi movq %rsi, %rax salq $4, %rax subq %rsi, %rax addq %rdi, %rax movl mat2(,%rax,4), %ecx leaq (%rdi, %rdi, 4), %rdx leaq 0(, %rdx, 4), %rax addq %rax, %rsi movl %ecx, mat1,(,%rsi,4) ret
我的尝试过程
copy_element: movslq %edi, %rdi ; rdi = i(符号扩展为64位) movslq %esi, %rsi ; rsi = j(符号扩展为64位) movq %rsi, %rax ; rax = j salq $4, %rax ; rax = 16j(左移4位等价于乘16) subq %rsi, %rax ; rax = 16j - j = 15j addq %rdi, %rax ; rax = 15j + i movl mat2(,%rax,4), %ecx ; ecx = mat2[j][i],内存偏移为4*(15j + i) leaq (%rdi, %rdi, 4), %rdx ; rdx = i + 4*i = 5i(leaq计算规则:base + index*scale) leaq 0(, %rdx, 4), %rax ; rax = 0 + 5i*4 = 20i addq %rax, %rsi ; rsi = j + 20i movl %ecx, mat1,(,%rsi,4) ; 将ecx的值存入mat1[i][j],内存偏移为4*(j + 20i) ret
我推测P=15、Q=20,或是P=60、Q=80,但不确定是否正确,恳请帮助。
内容的提问来源于stack exchange,提问作者BOB
相关产品推荐
相关产品推荐

