8086的尋址方式
系統總線上傳送的信息包括數據信息、地址信息、控制信息,因此,系統總線包含有三種不同功能的總線,即數據總線DB(Data Bus)、地址總線AB(Address Bus)和控制總線CB(Control Bus)
8086有20位地址總線,可以傳送20位地址,1M的尋址能力
8086的數據總線16根,它又是16位結構的CPU,它內部能夠一次性處理、傳輸、暫時存儲的地址為16位。如果將地址從內部簡單地發出,那么它只能送出16位的地址,表現出來的尋址能力只有64KB
8086采用一種在內部用2個16位地址合成的方法來生成1個20位的物理地址
-
CPU訪問內存單元時,要給出內存單元的地址,所有的內存單元都有唯一的地址,叫做物理地址
來自”請叫我hank“.png
來自”請叫我hank“.png
來自”請叫我hank“.png
來自”請叫我hank“.png
內存分段管理
- 8086是用“基礎地址(段地址×16) + 偏移地址 = 物理地址”的方式給出物理地址
-
為了開發方便,我們可以采取分段的方法來管理內存,比如:
來自”請叫我hank“.png- 地址10000H~100FFH的內存單元組成一個段,該段的起始地址(基礎地址)為10000H,段地址為1000H,大小為100H(00H~FFH)
- 地址10000H1007FH、10080H100FFH的內存單元組成2個段,它們的起始地址(基礎地址)為:10000H和10080H,段地址為1000H和1008H,大小都為80H
- 在編程時可以根據需要,將若干連續地址的內存單元看做一個段,用段地址×16定為段的起始地址(基礎地址),用偏移地址定位段中的內存單元
- 段地址×16必然是16的倍數,所以一個段的起始地址(基礎地址)也一定是16的倍數
- 偏移地址為16位,16位地址的尋址能力為64KB,所以一個段的長度最大為64KB
2990730-0b8a3547ac2df905(1).png
段寄存器
- 8086在訪問內存時要由相關部件提供內存單元的段地址和偏移地址,送入地址加法器合成物理地址
- 是什么部件提供段地址?段地址在8086的段寄存器中存放
- 8086有4個段寄存器:CS,DS,SS,ES,當CPU訪問內存由這4個寄存器提供內存地址
CS (Code Segment):代碼段寄存器
DS (Data Segment):數據段寄存器
SS (Stack Segment):堆棧段寄存器
ES (Extra Segment):附加段寄存器
CS和IP
- CS為代碼段寄存器,IP為指令指針寄存器,它們指示了CPU當前要讀取指令的地址(IP就是傳說中的偏移地址)
-
任意時刻,8086CPU都會將CS:IP指向的指令作為下一條需要取出執行的指令
1.png
2.png
1.CS中的內容2000H為段地址,IP中的內容為0000H為偏移地址,相加得到內存的物理地址
2.mov ax, 0123H mov傳送指令 ax是通用寄存器里面存放0123H,
采用了高高低低的存放方式,內存存放邏輯空間從上到下按照低到高,
01存放高地址,23存放低地址