현재 어셈블러 프로그램을 작성하는 방법을 이해하려면 다음 블로그를 읽고 있습니다. 나는 블로그의 모든 것을 이해하지만, 한 가지를 생각할 수는 없습니다.64 비트 포인터를 x86_64 어셈블러에서 4 바이트에 맞출 수있는 방법
https://www.recurse.com/blog/7-understanding-c-by-learning-assembly
코드 : 우리가 제로 -0x4로 (%의 RBP)를 쓸 수있는 이유
0x0000000100000f50 <main+0>: push %rbp
0x0000000100000f51 <main+1>: mov %rsp,%rbp
0x0000000100000f54 <main+4>: mov $0x0,%eax
0x0000000100000f59 <main+9>: movl $0x0,-0x4(%rbp)
는 이해가 안 돼요. 1 번 줄에서 스택에 % rbp 레지스터에 저장된 포인터를 푸시했습니다. % rbp 레지스터 크기가 64 비트이므로 나중에 -0x4 (% rbp)가 아닌 -0x4 (% rbp) 위치에 0을 씁니다. 스택은 -0x4 (% rbp)가 아닌 4 바이트 (32 비트)입니다.
누구든지 설명 할 수 있습니까?
미리 감사드립니다.
64 비트 레지스터를 저장하지 않고 32 비트 상수를 저장하고 있습니다. – gnasher729