彙編棧空間問題

時間 2022-03-12 14:10:18

1樓:匿名使用者

此題最重要的是要明白不能用debug單步跟蹤。主要原因是資料段和堆疊段相同,又有call word ptr ds:[0eh]指令。

任何涉及堆疊操作的,都會同時改變資料段中的值,包括呼叫子程式,被中斷等等。

用call指令原理分析,執行call word ptr ds:[0eh],sp=sp-2=10h-2=0eh,且0eh開始的字單元儲存ip,程式轉到下條指令(inc ax),程式結束前ax=2.正常。

假設用debug單步跟蹤,執行call word ptr ds:[0eh],sp=sp-2=10h-2=0eh,指令執行後就被debug中斷,首先壓入標誌暫存器,即0eh開始的字單元儲存標誌暫存器的值。單步中斷結束後,程式會jmp word ptr ds:

[0eh],程式飄到標誌暫存器指向的記憶體,運氣不好程式可能會崩潰,運氣好程式可以跑完,但結果難以預料,不受控制,隨機的。應為不知道程式會執行什麼指令,ss:[08h]會是什麼值也不是確定的。

2樓:id雞蛋炒韭菜

ds和ss是一個地址

關於順序棧的問題,資料結構順序棧的問題

我有點懷疑這段程式的正確性。我覺得它是完全錯誤的,從開頭看,根本不是順序棧,是鏈式的,那後面怎麼有出現溢位呢?不明白 我個人認為這已經是最簡單直接的方法了.這應該是很好的方法了,使用也不復雜啊,或者你可以把棧頂用整數來實現?不用指標,那樣判斷就簡單一點,不過其他地方使用又複雜一點,如下 includ...

彙編裡的PUSH壓棧使用他是為了進行什麼步驟而使用的呢

push和poppush相當於是寄存東西pop相當於把他取出來你要去商店買東西,暫時把手上的東西寄存了等買完了再把他拿出來是一個道理 不丟失資料進行壓入 push 棧保護,出棧 pop 恢復原資料。例如共用累加器a,進棧前壓入保護,累加器可在進行運算,出棧恢復原累加器中的數值。結果不會影響原數值。 ...

組合語言問題,組合語言問題

蜜蜂小玉米 assume cs code assume ds data data segment db i love you.data ends code segment start mov ax,data mov ds,ax mov bx,0 s0 check mov al,ds bx cmp a...