我对与 C 混合使用的 asm 代码有问题,但在具有适当参数的 asm 代码中使用时却没有。
;; array - RDI, x- RSI, y- RDX
getValue:
mov r13, rsi
sal r13, $3
mov r14, rdx
sal r14, $2
mov r15, [rdi+r13]
mov rax, [r15+r14]
ret
从技术上讲,我想保持 rdi、rsi 和 rdx 寄存器不变,因此我使用其他寄存器。
我使用的是 x64 机器,因此我的指针有 8 个字节。从技术上讲,这段代码应该这样做:
int getValue(int** array, int x, int y) {
return array[x][y];
}
它以某种方式在我的 C 代码中工作,但在 asm 中以这种方式使用时不起作用:
mov rdi, [rdi] ;; get first pointer - first row
mov r9, $4 ;; we want second element from the row
mov rax, [rdi+r9] ;; get the element (4 bytes vs 8 bytes???)
mov rdi, FMT ;; prepare printf format "%d", 10, 0
mov rsi, rax ;; we want to print the element we just fetched
mov eax, $0 ;; say we have no non-integer argument
call printf ;; always gives 0, no matter what's in the matrix
有人可以看到这个并帮助我吗?提前致谢。