Pages

2011年4月29日 星期五

[x86 Processor 組合語言] PTR, offset and Stack

今天剛弄懂的一點語法,記錄下來。

以下記錄關於PTR的用法:
1.   ptr指向的位置,裡面的值可以拿出來用。例如:
      mov   ax,BYTE   ptr   Uncle
      ;可以將Uncle這個變數從offset開始取出Byte長度的值,丟給ax。
      ;Offset指向的位置,是從較低位開始。

      於是我推測,如果寫:
      push   dword   ptr   3     ;代表將3這個數字從低位數開始,
                                            ;取dword長度(也就是4個byte),推到堆疊。
                                            ;所以就是把3推到堆疊。

       如果寫:
       push   dword   ptr   offset   Uncle
       ; 代表將Uncle這個變數的位址取出,取dword長度,推到堆疊。

2.   offset跟ptr不同在於,ptr拿的是值,offset直接將某個變數的位址取出。

Stack:
1.   每次push,會減少ESP的值(每次減少4的byte數要看operand的資料大小)。所以ESP指向的記憶體位址,會隨著push越多資料而越來越小的。

2.   pushad跟popad適合分別寫在某程序的開頭跟結尾,如果此程序有更改到如EAX、ECX、EDX、EBX、ESP等等32bit的暫存器。

沒有留言:

張貼留言