簡體   English   中英

如何在x86_64匯編器中將64位指針裝入4個字節

[英]How can 64-bit pointer fit into 4 bytes in x86_64 assembler

我目前正在閱讀以下博客,以了解如何編寫匯編程序。 我了解博客中的所有內容,但我一無所知。

https://www.recurse.com/blog/7-understanding-c-by-learning-assembly

碼:

0x0000000100000f50 <main+0>:    push   %rbp
0x0000000100000f51 <main+1>:    mov    %rsp,%rbp
0x0000000100000f54 <main+4>:    mov    $0x0,%eax
0x0000000100000f59 <main+9>:    movl   $0x0,-0x4(%rbp)

我不明白為什么我們可以將零寫入-0x4(%rbp)。 在第1行,我們將保存在寄存器%rbp中的指針壓入堆棧。 由於%rbp寄存器的大小為64位,我以后會期望我們必須將0寫入堆棧中的-0x8(%rbp)位置,而不是-0x4(%rbp),后者僅為4字節(32位)。

誰能解釋一下?

提前致謝。

由於此時%rsp%rbp相等,因此-0x4(%rbp)在紅色區域位於堆棧指針下方 這是信號處理程序(和調試器)未觸及的區域,因此即使它位於堆棧指針下方也可以使用。

movl指令存儲一個int ,一個32位的數量,而不是一個64位的機器字。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM