3.1 字和資料段
1. 字在記憶體中存儲時,要用兩個位址連續的記憶體單元來存放,字的低位位元組存放在低位址單元中,高位位元組存放在高位址單元中。
2. 用mov指令通路記憶體單元,可以在mov指令中隻給出單元的偏移位址,此時,段位址預設在DS寄存器中。
3. [address]表示一個偏移位址位address的記憶體單元。
4. 在記憶體和寄存器之間傳送字行資料時,高位址單元和高8位寄存器,低位址單元和低8位寄存器相對。
5. mov, add, sub是具有兩個操作對象的指令。jmp是具有一個操作對象的指令。
3.2 棧
1. 在SS,SP中存放棧頂的段位址和偏移位址;提供入棧和出棧指令,他們根據SS:SP訓示的位址,按照棧的方式通路記憶體單元。
2. push指令的執行步驟:SP = SP - 2;向SS:SP指向的字單元中送入資料。
3. pop指令的執行步驟:從SS:SP指向的字單元中讀取資料;SP = SP + 2。
4. 任意時刻,SS:SP指向棧頂元素。
5. 8086CPU隻記錄棧頂,棧空間,的大小我們要自己管理。
6. 用棧來暫存以後需要恢複的寄存器的内容,寄存器出棧的順序要和入棧的順序相反。
7. push,pop實質上是一種記憶體傳送指令,注意他們的靈活應用。
3.3 棧段
- 對于8086PC機,在程式設計時,可以根據需要,将一組記憶體單元定義位一個段。我們可以将長度為N(N ≤ 64KB)的一組位址連續,起始位址為16的倍數的記憶體單元,當作棧空間來用,進而定義了一個棧段。
- 在這個棧段中,任意時刻,SS:SP指向棧頂元素,當棧為空的時候,棧中沒有元素,也就不存在棧頂元素,是以SS:SP隻能指向棧的最底部單元下面的單元,該單元的位址為棧最底部的字單元的位址+2。棧最底部字單元的位址為1000:FFFE,是以棧空時,SP=0000H。一直壓棧,直到棧滿時SP = 0;如果再次壓棧,棧頂将環繞,覆寫了原來棧中的内容。是以一個棧段的容量最大為64KB。