我想了解彙編代碼。我停留在指針被分配的部分和所述代碼之後leaq
命令瞭解x86-64中的指針分配彙編代碼
這是我的C代碼:
#include <stdio.h>
#include<stdlib.h>
int main(){
int x=50;
int *y=&x;
return 0;
}
這是我的對應彙編代碼:
.file "AssemlyCode.c"
.def __main; .scl 2; .type 32; .endef
.text
.globl main
.def main; .scl 2; .type 32; .endef
.seh_proc main
main:
pushq %rbp
.seh_pushreg %rbp
movq %rsp, %rbp
.seh_setframe %rbp, 0
subq $48, %rsp
.seh_stackalloc 48
.seh_endprologue
call __main
movl $50, -12(%rbp)
leaq -12(%rbp), %rax
movq %rax, -8(%rbp)
movl $0, %eax
addq $48, %rsp
popq %rbp
ret
.seh_endproc
.ident "GCC: (GNU) 5.4.0"
'int y =&x;'無效。 'y'不是指針 –
對不起,我在編寫代碼時犯了一個菜鳥錯誤.....我現在已經糾正了它 – BrainsOfSteel
更容易閱讀示例:將指針傳遞給本地到外部函數。然後,您可以啓用優化,而無需優化一切。 [請參閱Godbolt編譯器資源管理器中的source + asm](https://godbolt.org/g/N6ESby),它刪除所有設置目標文件元數據的'.seh_'和其他指令。 –