You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

通过汇编代码推导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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:50:24