今天剛弄懂的一點語法,記錄下來。
以下記錄關於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的暫存器。
沒有留言:
張貼留言