寄存器(内存访问)07 - 零基础入门学习汇编语言19
生活随笔
收集整理的這篇文章主要介紹了
寄存器(内存访问)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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: VRP 的发展
- 下一篇: VRRP在生产环境中的应用