天天看點

(彙編)8086CPU位址 寄存器筆記寄存器位址

寄存器

8086CPU從功能上分為兩大部分:執行部件EU(Execution Unit)與總線接口部件BIU(BUS Interface Unit)

(彙編)8086CPU位址 寄存器筆記寄存器位址

執行部件的構成:

功能:是負責執行所有的指令,向總線接口部件提供指令執行的結果資料和位址,并對通用寄存器和标志寄存器進行管理。

1.四個通用寄存器:AX(累加器 Accumulator), BX(基址寄存器 Base), CX(計數寄存器 Count), DX(資料寄存器 Data)。

X表示16位,可按位址高低分為8位寄存器 ~H 和 ~L,其中 ~ 表示A or B or C or D。這裡既可以作為4個16位通用寄存器,也可以當做8個8位寄存器使用。

程式設計中,一般把AX用作累加器,BX 用作基址寄存器,CX用作計數器,DX用作資料寄存器。

2.四個專用寄存器:基數指針寄存器BP(Base Pointer),堆棧指針寄存器SP(Stack Pointer),源變址寄存器SI(Source Index),目的變址寄存器DI(Destination Index)

SP:堆棧指針寄存器;裝棧頂指針偏移量。

BP:基址指針寄存器:裝棧段中一個資料區的基址偏移量。

SI:源變址寄存器;裝源操作數位址的偏移量。

DI:目的變址寄存器;裝目的操作數位址偏移量。

(彙編)8086CPU位址 寄存器筆記寄存器位址
(彙編)8086CPU位址 寄存器筆記寄存器位址

3.标志寄存器FR(Flags Register):用來存放運算結果和特征,16位寄存器。

Nine individual bits of the Flags register are used as control flags 控制标志 (3 of them) and status flags 狀态标志 (6 of them). The remaining 7 are not used.

A flag can only take on the values 0 and 1. We say a flag is set if it has the value 1.

The status flags are used to record specific characteristics of arithmetic and of logical instructions.

位址位 标志
15
14
13
12
11 OF
10 DF
9 IF
8 TF
7 SF
6 ZF
5
4 AF
3
2 PF
1
CF

标志位分為兩大類:一類是狀态标志,用來表示算術、邏輯運算的結果特征。(CF,PF,AF,ZF,SF,OF)。一類是控制标志;用來表示控制CPU的操作特征。(IF、DF、TF)

CF(FR0)進位位:CF=1為加、減運算結果的最高位有進位或有借位,否則CF=0。

PF(FR2)奇偶位:PF=1為操作結果“1”的個數為偶數,否則PF=0。

AF(FR4)輔助進位位:AF=1為運算結果的低4位向高4位有進位或有借位,(用于10進制BCD碼運算指令)否則A=0。

ZF(FR6)零值位:ZF=1運算結果為0,否則ZF=0。

SF(FR7)符号位:SF=1運算結果最高為0(E),否則SF=0。

OF(FR11)溢出位:OF=1在算術運算時,帶符号數的運算結果超出數的表示範圍。否則OF=0。

TF(FR8)單步标志位:TF=1CPU進入單步工作方式。

IF(FR9)中斷允許位:IF=1允許CPU響應可屏蔽外部中斷請求。IF=0禁止中斷。

DF(FR10)方向位:DF=1在字元串操作時使位址指針自動減量。DF=0自動增量。

4.算術邏輯部件ALU

總線接口部件

功能:執行外部總線周期,負責存儲器與外部端口I|O傳送資料。也就是負責CPU與存儲器和外設之間的資訊交換。

(1)四個段寄存器:代碼段寄存器CS(Code Segment),資料段寄存器DS(Data Segment),附加段寄存器ES(Extra Segment),堆棧段寄存器SS(Stack Segment)。

CS:代碼段寄存器;裝代碼段的起始位址;
DS:資料段寄存器;裝資料段的起始位址;
SS:堆棧段寄存器;裝堆棧段的起始位址;
ES:附加段寄存器;裝附加段的起始位址。
           

(2)指令指針寄存器IP(Instruction Pointer Register ): 存放目前指令的下一第指令的起始存儲單元的偏移位址。

This is a crucially important register which is used to control which instruction the CPU executes. The ip, or program counter, is used to store the memory location of the next instruction to be executed. The CPU checks the program counter to ascertain which instruction to carry out next. It then updates the program counter to point to the next instruction. Thus the program counter will always point to the next instruction to be executed

(3)位址加法器

(4)指令隊列

位址

采用分段結構的存儲器中,任何一個邏輯位址都由段基值(存放在某一個段寄存器中,是一個邏輯段的起始單元位址(段基址)的高16位)和偏移位址(offset)(表示某個存儲單元與它所在段的段基址之間的位元組距離)兩部分構成,都是 16位二進制數。

邏輯位址表示:

段基值:偏移量
  			如2366:001AH
  			表示該邏輯單元的段起始位址位于23660H,段内偏移量為001AH個位元組。其實體位址為2367AH。
           

實體位址:存儲器的絕對位址,範圍:00000H~FFFFFH,是CPU通路存儲器的實際尋址位址(也稱為絕對位址)

邏輯位址轉實體位址:

16位的段基址左移4位(相當于在段基址最低位後添4個“0”),然後與偏移位址相加。如下的位址運算:

實體位址=段基址(cs ds es ss )×16+偏移位址

原因:

8086CPU位址線為20條,是以8086CPU尋址範圍1MB(2^20=1024KB)。但指令僅給出16位位址,與尋址有關的寄存器也隻有16位長,是以尋址範圍隻有64KB,為了尋址1MB,是以分成四個邏輯段。當CPU通路記憶體時,**段寄存器的内容(段基址)自動左移4位(二進制),與段内16位位址偏移量相加,形成20位的實體位址。**即8086系統的實體位址是将段位址寄存器的内容左移4位(或乘16)加上偏移位址,即可得到20位的實體位址。

二者搭配(見圖):

(彙編)8086CPU位址 寄存器筆記寄存器位址

Note:

CPU在從存儲器取指令時,以段寄存器CS作為代碼段的基址指針,以IP的内容為偏移量,共同形成一條指令的存放位址

繼續閱讀