代碼運行結果如下,為什么堆疊段里的資料有一部分,到BBBB以后就不按我代碼的資料了。

uj5u.com熱心網友回復:
準確地說是很多資料都沒按我寫的來記錄到記憶體里,可能大部分記錄正確,也可能大部分記錄不正確。難道dw只負責占位,不負責記錄準確資料?
uj5u.com熱心網友回復:
那是 stack 堆疊段哎,單步以及 g帶地址,都會用到的,就是內容被覆寫了。要看,在剛載入程式時看吧,就是要換算下 ss,或者 stack segment stack 這樣定義 stack 段,會自動設定 ss:sp 無需程式自己進行賦值。uj5u.com熱心網友回復:
你好,謝謝回復。
已經把代碼段、堆疊段、資料段分開了,也沒有對堆疊做push,為什么stack會被覆寫內容?從截圖中也看到,ds ss cs的段地址相距甚遠。
uj5u.com熱心網友回復:
單步命令 t 或 p 及運行命令 g 都涉及到中斷,就都會使用到堆疊的;看堆疊最后,以 word 為單位向前看,分明是 標記暫存器、回傳的段址即當前程式的cs、回傳地址的 ip即 ip=0010 那里,這就是標準的中斷發生時的壓堆疊現場啊。uj5u.com熱心網友回復:
原來還有這么一個知識點,我還學到。
我以為堆疊也是一段完全由用戶自定義的空間,以為沒有push就沒有變化,沒想到什么中斷還會影響堆疊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/275598.html
標籤:匯編語言
上一篇:穩健距離和馬氏距離的散點圖的包
下一篇:求助
