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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

寄存器(内存访问)07 - 零基础入门学习汇编语言19

發布時間:2025/3/8 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 寄存器(内存访问)07 - 零基础入门学习汇编语言19 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第三章:寄存器(內存訪問)07

?

讓編程改變世界

Change the world by program


?

棧段

? 前面講過,對于8086PC機,在編程時,我們可以根據需要 ,將一組內存單元定義為一個段。 我們可以將長度為 N(N ≤64K )的一組地址連續、起始地址為16的倍數的內存單元,當作棧來用,從而定義了一個棧段。 比如我們將10010H~1001FH 這段長度為 16 字節的內存空間當作棧來用,以棧的方式進行訪問。 這段空間就可以成為棧段,段地址為1000H,大小為16字節。 將一段內存當作棧段,僅僅是我們在編程時的一種安排,CPU 并不會由于這種安排,就在執行push、pop 等棧操作指令時就自動地將我們定義的棧段當作棧空間來訪問。 ?

如何使的如push、pop 等棧操作指令訪問我們定義的棧段呢?

將SS:SP指向我們定義的棧段。 ?

問題3.11

如果我們將10000H~1FFFFH這段空間當作棧段,初始狀態是空的,此時,SS=1000H,SP=? ?

思考后看分析

我們將10000H~1FFFFH這段空間當作棧段 ,SS=1000H ,棧空間大小為64KB ,棧最底部的字單元地址為1000:FFFE。 任意時刻,SS:SP指向棧頂,當棧中只有一個元素的時候,SS=1000H,SP=FFFEH。 棧為空,就相當于棧中唯一的元素出棧,出棧后,SP=SP+2。 SP原來為FFFEH,加2后SP=0,所以,當棧為空的時候,SS=1000H,SP=0。 ?

換個角度看

任意時刻,SS:SP指向棧頂元素,當棧為空的時候 ,棧中沒有元素 ,也就不存在棧頂元素,所以SS:SP只能指向棧的最底部單元下面的單元 ,該單元的偏移地址為棧最底部的字單元的偏移地址+2 ,棧最底部字單元的地址為1000:FFFE,所以棧空時,SP=0000H。 ?

問題3.12

一個棧段最大可以設為多少?為什么? 思考后看分析 ?

一個棧段最大可以設為多少?

分析:這個問題顯而易見,提出來只是為了提示我們將相關的知識融會起來。 首先從棧操作指令所完成的功能的角度上來看,push、pop等指令在執行的時候只修改SP; 所以棧頂的變化范圍是0~FFFFH,從棧空時候的SP=0,一直壓棧,直到棧滿時SP=0;如果再次壓棧,棧頂將環繞,覆蓋了原來棧中的內容。 所以一個棧段的容量最大為64KB。 ?

段的綜述 == 總結 + 啰嗦

? 我們可以將一段內存定義為一個段,用一個段地址指示段,用偏移地址訪問段內的單元。這完全是我們自己的安排。

我們可以用一個段存放數據,將它定義為“數據段”;

我們可以用一個段存放代碼,將它定義為“代碼段”;

我們可以用一個段當作棧,將它定義為“棧段”;

? 我們可以這樣安排,但若要讓CPU按照我們的安排來訪問這些段,就要:

對于數據段,將它的段地址放在 DS中,用mov、add、sub等訪問內存單元的指令時,CPU就將我們定義的數據段中的內容當作數據段來訪問;

對于代碼段,將它的段地址放在 CS中,將段中第一條指令的偏移地址放在IP中,這樣CPU就將執行我們定義的代碼段中的指令;

對于棧段,將它的段地址放在SS中,將棧頂單元的偏移地置放在 SP 中,這樣CPU在需要進行棧操作的時候,比如執行 push、pop 指令等,就將我們定義的棧段當作棧空間來用。

? 可見,不管我們如何安排 ,CPU 將內存中的某段內存當作代碼 ,是因為CS:IP指向了那里。 CPU將某段內存當作棧 ,是因為 SS:IP 指向了那里。 我們一定要清楚 ,什么是我們的安排,以及如何讓CPU按我們的安排行事。 要非常的清楚CPU的工作機理,才能在控制CPU來按照我們的安排運行的時候做到游刃有余。 ? 比如我們將10000H~1001FH安排為代碼段,并在里面存儲如下代碼:

設置CS=1000H,IP=0,這段代碼將得到執行。

? 可以看到,在這段代碼中,我們又將10000H~1001FH 安排為棧段和數據段。 10000H~1001FH這段內存,既是代碼段,又是棧段和數據段。 一段內存,可以既是代碼的存儲空間,又是數據的存儲空間,還可以是棧空間,也可以什么也不是。 關鍵在于CPU中寄存器的設置,即:CS、IP、SS、SP、DS的指向。 檢測點3.2 [buy]?獲得所有教學視頻、課件、源代碼等資源打包?[/buy] [Downlink href='http://kuai.xunlei.com/d/LCMHTRKPMYHS']視頻下載[/Downlink]

轉載于:https://www.cnblogs.com/LoveFishC/archive/2010/11/17/3846973.html

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的寄存器(内存访问)07 - 零基础入门学习汇编语言19的全部內容,希望文章能夠幫你解決所遇到的問題。

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