一直對暫存器esp和ebp的概念總是有些混淆,檢視定義esp是棧頂指標,ebp是訪問堆疊指標。還是不能很透徹理解。之後借於一段彙編**,總算是對兩者有個比較清晰的理解。
下面是按呼叫約定__stdcall 呼叫函式test(int p1,int p2)的彙編**
;假設執行函式前堆疊指標esp為nn
push p2 ;引數2入棧, esp -= 4h , esp = nn - 4h
push p1 ;引數1入棧, esp -= 4h , esp = nn - 8h
call test ;壓入返回位址 esp -= 4h, esp = nn - 0ch
;//進入函式內
看完彙編後,再看ebp和esp的定義,哦,豁然開朗,
原來esp就是一直指向棧頂的指標,而ebp只是訪問某時刻的棧頂指標,以方便對棧的操作,如獲取函式引數、區域性變數等。
彙編2 段暫存器
8086cpu有20根位址線,最大可定址記憶體空間為1mb。而8086的暫存器只有16位,指令指標 ip 和變址暫存器 si di 也是16位的。用16位的位址定址1mb空間是不可能的。所以就要把記憶體分段,保證0000h ffffh 能將整個段尋遍 也就是把1mb空間分為24,即16個段,每段不超...
8086彙編 段暫存器
段暫存器存放記憶體中不同位址段的儲存,專門的暫存器存放段位址來提供使用。8086cpu中主要使用4個段暫存器下面會有說明。將段位址放在 ds中用mov add sub等訪問記憶體單元的指令時,cpu將我們定義的資料段中的內容當作資料段來訪問 將段位址放在 cs中,將段中第一條指令的偏移位址放在ip中...
組合語言 暫存器(記憶體訪問 ds資料段暫存器)
這段話的主要意思是 乙個字 2b 16bit,cpu中是用兩個記憶體單元儲存乙個字 假如獲取0位址存放的字型資料,就是獲取它的高位位元組0 1位和低位位元組0位的資料,資料由高位址位向低位址位讀 1 0位址單元中存放的位元組型資料是多少?20h 2 0位址字單元中存放的字型資料是多少?4e20h 3...