簡體   English   中英

在操作碼中匯編段

[英]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 PTRSS: .

第一個告訴我們,我們想在指向的地址存儲一個單詞。 當匯編器無法從指令的操作數中判斷出這一點時,這是必需的。 這里30也可以是一個存儲的字節。

SS:是段前綴,表示我們想要使用相對於堆棧段的地址。 在這種情況下,它不是嚴格需要的,因為這是使用ESPEBP寄存器時的默認值。 所以指令的第二個版本與第一個版本相同。

如果你使用EBX而不是EBP那就會有所不同!

  • SS是Stack Segment
  • DS是數據段
  • PTR - 指針。 這是一個地址。

當你這樣做

mov ax, some_variable

你真的替換這個形式“ mov ax, ds:[pointer_to_variable]

在SS的情況下,您訪問的值不是來自DS,而是來自堆棧而不是:)。 將段寄存器視為庫。 數據來自DS,來自SS的堆棧數據,來自CS的代碼數據,額外的段是ES。

暫無
暫無

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

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