【16位微機原理、彙編語言及接口技術教程(錢曉捷)】8088/8086的寄存器結構與存儲器結構

寫在前面:本來挺害怕這些偏硬件的東西,覺得裏面挺複雜,但今天下午沉下心來重新再去看這些時,發現也不是很難,總線什麼的在計組裏都有了,在這就不說了,專門將寄存器和存儲器的知識點總結了下,這是以後學習彙編語言的一個基礎,對於尋址方式和指令,我也會抽時間整理出來,整理的過程真的是受益匪淺,也希望我整理的知識點對大家有幫助。
文章的大綱如下圖:

微處理器的內部結構
8088/8086的寄存器結構
8088/8086的存儲器結構
通用寄存器
標誌寄存器

標準ASCLL碼及其字符(方便記憶)

  1. 幾個典型ASCLL碼
ASCLL碼 字符
0AH LF(換行)
0DH CR(回車)
30H 0
39H 9
41H A
5AH Z
61H a
7AH z

8088/8086寄存器結構

在這裏插入圖片描述

1. 通用寄存器(8個16位)

  • 數據寄存器(4個16位,可分爲8個八位)
15-8位 7-0位 16位寄存器名
AH AL AX 累加器
BH BL BX 基址寄存器
CH CL CX 計數器
DH DL DX 數據寄存器
  • 變址寄存器(2個)
SI 源地址寄存器
DI 目的地址寄存器
  • 指針寄存器(2個)
BP 基址指針
SP 堆棧指針

2.標誌寄存器

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
CF PF AF ZF SF TF IF DF OF
狀態標誌
  1. CF-進位標誌。當加減運算結果的最高有效位有進位(加法)或借位(減法)時,進位標誌爲1,即CF=1;否則CF=0;
  2. ZF 零標誌。若運算結果爲零,ZF=1,否則ZF=0。
  3. SF 符號標誌。運算結果的最高有效位就是符號標誌的狀態。即:運算結果最高位是1,則SF=1;否則爲0;
  4. PF 奇偶標誌。當運算結果最低字節中“1”的個數爲零或偶數時,PF=1;否則PF=0。注意,PF僅反映的是低八位中“1”的個數是偶數還是奇數,即使是16位操作數也是如此。
  5. OF 溢出標誌。若算術運算的結果有溢出,則OF=1;否則OF=0。
控制標誌
  1. DF----方向標誌。用於串操作指令中,以控制地址的變化方向;當DF=1時,每次串操作後的地址就自動減小;當DF=0時,每次串操作後的地址就自動增加。
  2. IF----中斷允許標誌。該標誌用於控制外部可屏蔽中斷是否可以被處理器響應。若IF=1,則允許中斷,若IF=0,則不允許中斷。
  3. TF—陷阱標誌。該標誌控制處理器是否進入單步操作方式。若TF=1,則允許中斷;若TF=0,則禁止中斷。

8088/8086的存儲器結構

1.數據的存儲格式

1.1信息存儲單位
* 二進制位Bit:存儲一位二進制數:0或1
* 字節Byte:8個二進制位,D7~D0
* 字Word:16位,2個字節,D15~D0
* 雙字DWord:32位,4個字節,D31~D0

存儲器中以字節位單位存儲信息。
爲了區別每個字節單元,將它們編號,稱爲存儲器地址。地址編號從0開始,順序加1,是一個無符號的二進制整數,常用十六進制數表示,如下圖?:
在這裏插入圖片描述

1.2 存儲單元及其存儲內容
  • 存儲地址:存儲單元的編號,如上圖的0000H、0001H
  • 每個存儲單元存放一個字節(8位)的內容。
  • 表達:地址爲0002H存儲單元存放有一個數據34H,表達爲 [0002H]=34H
1.3 多字節數據存放方式

1. 多字節數據在存儲器中佔連續的多個存儲單元:
存放時,低字節存入低地址,高字節存入高地址;
表達時,用它的低地址表示多字節數據佔據的地址空間。
2.舉例
在上圖中:
0002H“字”單元的內容爲:
[0002H] = 1234H
0002H號“雙字”單元的內容爲:
[0002H] = 78561234H

1.4 數據的地址對齊

1.同一個存儲器地址可以是字節單元地址、字單元地址、雙字單元地址等等
2.字節單元的地址可以任意單元安排在偶地址(xxx0B)、雙字單元安排在模4地址(xx00B)等,爲“地址對齊(Align)”(N字節數據安排的起始地址能夠被N整除)
後果:對於不對齊地址的數據,處理器訪問時,需要額外的訪問存儲器時間,應該將數據的地址對齊,以取得較高的存取速度。

存儲器的分段管理

1. 8088CPU有20條地址線
  • 最大可尋址空間爲220=1MB
  • 物理地址範圍從00000H~FFFFFH
2.8088CPU將1MB空間分成許多邏輯段(Segment)
  • 每個段最大限制爲64KB
  • 段地址的低4位爲0000B

這樣,一個存儲單元除具有一個唯一的物理地址外,還具有多個邏輯地址

3.物理地址和邏輯地址
  • 8088CPU存儲系統中,對應每個物理存儲單元都有一個唯一的20位編號,就是物理地址,從00000H ~ FFFFFH

  • 分段後在用戶編程時,採用邏輯地址,形式爲:段基地址 : 段內偏移地址

  • 舉例:
    物理地址 14700H
    邏輯地址 1460H:100H

  • 段基地址說明邏輯段在主存中的起始位置,簡稱段地址。
    **注:**8088規定段地址必須是模16地址:xxxx0H,省略低4位0000B,段地址就可以用16位數據表示,就能用16位段寄存器表達段地址。

  • 段內偏移地址說明主存單元距離段起始位置的偏移量。 每段不超過64KB,偏移地址也可用16位數據表示。

4.物理地址和邏輯地址的轉換

1. 邏輯地址轉換爲物理地址的方法?
將邏輯地址中的段地址左移4位(對應十六進制是一位),加上偏移地址就得到20位物理地址
2. 物理地址可以轉換多個邏輯地址,舉例:
物理地址爲:14700H時,邏輯地址可以爲:1460H:0100H、1380H:0F00H
1460H左移4位成爲14600H,14600H+0100H=14700H

5.段寄存器
5.1 8088有4個16位段寄存器
  • CS指明代碼段的起始地址

代碼段寄存器CS
代碼段用來存放程序的指令序列
代碼段寄存器CS存放代碼段的段地址
指令指針寄存器IP指示下條指令的偏移地址
處理器利用CS:IP取得下一條要執行的指令

  • SS指明堆棧段的起始地址

堆棧段寄存器SS
堆棧段確定堆棧所在的主存區域
堆棧段寄存器SS存放堆棧段的段地址
堆棧指針寄存器SP指示堆棧棧頂的偏移地址
處理器利用SS:SP操作堆棧頂的數據

  • DS指明數據段的起始地址

數據段寄存器DS
數據段存放運行程序所用的數據
數據段寄存器DS存放數據段的段地址
各種主存尋址方式(有效地址EA)得到存儲器中操作數的偏移地址
處理器利用DS:EA存取數據段中的數據

  • ES指明附加段的起始地址

附加段寄存器ES
附加段是附加的數據段,也保存數據:
附加段寄存器ES存放附加段的段地址
各種主存尋址方式(有效地址EA)得到存儲器中操作數的偏移地址
處理器利用ES:EA存取附加段中的數據
串操作指令將附加段作爲其目的操作數的存放區域

5.2 如何分配各個邏輯段
  1. 程序的指令序列必須安排在代碼段
  2. 程序使用的堆棧一定在堆棧段
  3. 程序中的數據默認是安排在數據段,也經常安排在附加段,尤其是串操作的目的區必須是附加段
  4. 數據的存放比較靈活,實際上可以存放在任何一種邏輯段中
5.3 段超越前綴指令

沒有指明時,一般的數據訪問在DS段;使用BP訪問主存,則在SS段
默認的情況允許改變,需要使用段超越前綴指令;8088指令系統中有4個:

  1. CS: ;代碼段超越,使用代碼段的數據
  2. SS: ;堆棧段超越,使用堆棧段的數據
  3. DS: ;數據段超越,使用數據段的數據
  4. ES: ;附加段超越,使用附加段的數據
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章