[英]Assembly Segments in opcodes
我注意到在程序段中使用了代碼段。
例:
MOV DWORD PTR SS:[EBP-30],30
我認為“PTR SS:”用於指定EBP-30來自堆棧? (SS:堆棧段)我是對還是我完全錯了? :)那么,請你告訴我上面的例子和之間的區別
MOV DWORD PTR[EBP-30],30
那么在操作碼中使用的DS(數據段)呢?
MOV DWORD PTR SS:[EBP-30],30
這里有兩個獨立的修飾符, DWORD PTR
和SS:
.
第一個告訴我們,我們想在指向的地址存儲一個單詞。 當匯編器無法從指令的操作數中判斷出這一點時,這是必需的。 這里30
也可以是一個存儲的字節。
SS:
是段前綴,表示我們想要使用相對於堆棧段的地址。 在這種情況下,它不是嚴格需要的,因為這是使用ESP
或EBP
寄存器時的默認值。 所以指令的第二個版本與第一個版本相同。
如果你使用EBX
而不是EBP
那就會有所不同!
當你這樣做
mov ax, some_variable
你真的替換這個形式“ mov ax, ds:[pointer_to_variable]
”
在SS的情況下,您訪問的值不是來自DS,而是來自堆棧而不是:)。 將段寄存器視為庫。 數據來自DS,來自SS的堆棧數據,來自CS的代碼數據,額外的段是ES。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.