日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

汇编代码中使用栈

發布時間:2025/6/15 编程问答 11 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编代码中使用栈 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ?先看一段代碼:

? ? ? ? ? ?

? ? ? ? ? 上面代碼的作用是將程序中的數據逆序存放,程序定義自己的數據,還定義一段空值內存來當做棧來使用,在程序加載時,操作系統會為它們分配內存。start表示程序的入口處,start的上面只是程序定義的數據。

? ? ? ? ? ss:sp是用來指向棧頂的,mov ax,cs是要ss指向程序的數據部分ss:48,棧底對應的那段內存地址是ss:16~ss:47。當棧空時,棧頂指針棧頂的下一個地址,即ss:48 。cs:[bx]這里的cs稱為段前綴,通常'[]'都是取段寄存器ds中的值,但是如果有段前綴,則'[]'取段前綴的地址。

? ? ? ? ?上述代碼中,棧頂指針ss:sp指向cs:40,push操作時:sp=sp-2;pop操作時:sp=sp+2,因為棧是從高地址往低地址增長的。push cs:[bx]對應的那個循環是將程序中的數據入棧。兩個循環bx來做偏移量,中間需要重置值。下面debug看一下。

?查看cd:0對應的數據,看到 23 01正是程序定義的數據,01是高位,23是低位。

當還沒有執行pop cs:[bx]指令時,1cd2:0020最后2個數據正好是0123h,這就是程序第一個push進入棧的,之前為00的數據現在有的已經有值了。下面再來看出棧。

現在第一個數據為0987h,這剛好是程序定義的第一個數據。

?

?

?

參考資料:<<匯編語言>>王爽

?

總結

以上是生活随笔為你收集整理的汇编代码中使用栈的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。