王爽匯編語(yǔ)言(第2版)實(shí)驗(yàn)2 學(xué)習(xí)
其中第2題是這樣的:
(2) 仔細(xì)觀察圖3.19中的實(shí)驗(yàn)過(guò)程,然后分析:為什么2000:0~2000:f中的內(nèi)容會(huì)發(fā)生改變?
可能要再做些實(shí)驗(yàn)才能發(fā)現(xiàn)其中的規(guī)律。如果你在這里就正確回答了這個(gè)問(wèn)題,那么要恭喜你,因?yàn)槟阌泻芎玫奈蛐?。大多?shù)的學(xué)習(xí)者對(duì)這個(gè)問(wèn)題還是比較迷惑的,不過(guò)不要緊,因?yàn)殡S著課程的進(jìn)行,這個(gè)問(wèn)題的答案將逐漸變得顯而易見。
對(duì)這道問(wèn)題,我看到網(wǎng)上的前輩基本上一致認(rèn)可的答案是:因?yàn)橛肨指令進(jìn)行調(diào)試時(shí),會(huì)產(chǎn)生中斷。而為了保護(hù)現(xiàn)場(chǎng),CPU則先將標(biāo)志寄存器進(jìn)棧、再把當(dāng)前CS的值進(jìn)棧,最后將IP的值進(jìn)棧。所以內(nèi)容也就是:IP-CS-EFlags-棧底.
這個(gè)答案是對(duì)的,不過(guò)我做了很多次實(shí)驗(yàn),發(fā)現(xiàn)棧中不僅僅是這些內(nèi)容,還壓了另外兩個(gè)寄存器:BP和AX。大家可以通過(guò)以下代碼實(shí)驗(yàn):


















結(jié)果如下:
也就是棧里面內(nèi)容有:AX-BP-IP-CS-EFlags-自己push的內(nèi)容-棧底。
疑問(wèn)就是為什么要保存ax和bp呢?
posted on 2012-05-31 10:13 Tim 閱讀(2108) 評(píng)論(0) 編輯 收藏 引用 所屬分類: 匯編語(yǔ)言