- CPU中,用16位來存儲一個字。高8位存放高位字節,低8位存放低位字節。
- 內存存儲中,內存單元是字節單元(1單元=1字節),則一個字要用兩個地址連續的內存單元存放。
- 內存存儲中,高位字節,和低位字節是相對的,指令指向的是低位字節。
- 字單元,即存放一個字型數據(16位=2字節)的內存單元,由兩個地址連續的內存單元組成。
- 8086CPU中有一個DS寄存器,通常用來存放要訪問數據的段地址。
- MOV指令的幾種種功能:
- 將數據直接送入寄存器 mov ax,1000H
- 將一個寄存器中的內容送入另一個寄存器 mov ax,bx;mov ds,ax
- 將一個內存單元中的內容送入寄存器 mov ax,[...]
- 將寄存器中的內容送入內存單元 mov [...],ax
- ...
- “[...]”表示一個內存單元,“[...]”中的內容則表示內存單元的偏移地址。
- 8086CPU中,不能給DS寄存器直接賦值,需要通過通用寄存器間接賦值,如“段地址-->通用寄存器-->DS寄存器”。
- add指令表示相加,sub指令表示相減。
- [address]便是一個偏移地址為address的內存單元。
- mov、add、sub是具有兩個操作對象的指令。jmp是具有一個操作對象的指令。
- 棧是一種具有特殊的訪問方式的存儲空間,它的特殊性就在于,先進后出的特性。
- 8086CPU提供了入棧和出棧指令,最基本的兩個是PUSH(入棧)和POP(出棧)。
- 8086CPU的入棧和出棧操作都是以字(2字節)為單位進行的。
- 8086CPU中,有兩個寄存器,段寄存器SS和寄存器SP,棧頂的段地址存放在SS中,偏移地址存放在SP中。
- 任意時刻,SS:SP指向棧頂元素。
- PUSH入棧時,SP=SP-2(1字),棧頂從高地址向低地址方向增長,出棧時則SP=SP+2.
- 當棧為空時,棧中沒有元素,也就不存在棧頂元素,所以SS:SP只能指向最底部單元下面的單元。
- 8086CPU不能保證我們對棧的操作不會超界,它只知道棧頂在何處(有SS:SP指示),并不知道這個棧有多大。
- push和pop指令可以有如下形式:
- push? 寄存器
- pop? ?寄存器
- push??段寄存器
- pop?? 段寄存器
- push? 內存單元
- pop?? 內存單元
- 請靈活,仔細運用CS:IP(指令),DS:[...](數據),SS:SP(棧)
- 對于數據段,將它的段地址放在DS中,用mov,add,sub等訪問內存單元的指令時,CPU就將我們第一的數據段內容當成數據來訪問。
- 對于代碼段,將它的段地址放在CS中,將段中的第一條執行的指令的偏移地址放在IP中,這樣CPU就會執行代碼段中的指令。
- 對于棧段,將它的段地址放在SS中,將棧頂單元的偏移地址放在SP中,這樣CPU在需要進行棧操作時,比如push,pop指令時,就將棧段當成棧空間來用了。
轉載于:https://www.cnblogs.com/zxj159/archive/2012/12/10/2811380.html