我可以通過這樣做將4個字節壓入堆棧:push DWORD 123但我發現我可以在push不指定操作數大小的情況下使用:push 123在這種情況下,push指令將多少字節壓入堆棧?推送的字節數是否取決于操作數大?。ㄒ虼嗽谖业氖纠兴鼘⑼扑?個字節)?
3 回答
MM們
TA貢獻1886條經驗 獲得超2個贊
計算機中的“堆棧寬度”是可以推入堆棧的最小數據量,被定義為處理器的寄存器大小。這意味著如果您正在處理具有16位寄存器的處理器,則堆棧寬度將為2個字節。如果處理器有32位寄存器,則堆棧寬度為4個字節。如果處理器有64位寄存器,則堆棧寬度為8個字節。
使用現代x86 / x86_64系統時不要混淆; 如果系統以32位模式運行,則堆棧寬度和寄存器大小為32位或4個字節。如果切換到64位模式,那么只有那時寄存器和堆棧大小才會改變。
茅侃侃
TA貢獻1842條經驗 獲得超22個贊
在64位長模式下,無法將32位值壓入堆棧。該表非常清楚,不是有效的編碼。我懷疑這只是其中一個案例,即使英特爾很難在他們的手冊中清楚地記錄,特別是因為他們嘗試這種一刀切的方法,其中一本手冊必須記錄數十年的微處理器和多個指令集。這事情是很清楚的有:“在64位模式,堆棧指針的大小始終是64位?!?/em>
- 3 回答
- 0 關注
- 2088 瀏覽
添加回答
舉報
0/150
提交
取消
