在CPU中:編程
運算器進行信息處理工具
寄存器進行信息存儲oop
控制器控制各類器件進行工做學習
內部總線鏈接各類器件,在它們之間進行數據的傳送spa
8086CPU 有 14個寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。翻譯
8086CPU 的全部寄存器都是16位的,能夠存放2個字節。
AX、BX、CX、DX 一般存放通常性的數據。被稱爲通用寄存器。
8086CPU的上一代CPU中的寄存器都是8位的,爲了保證兼容性,8086CPU的AX、BX、CX、DX這四個寄存器均可以分爲2個可獨立使用的8位寄存器來用:debug
AX可分爲AH和AL;指針
BX可分爲BH和BL;調試
CX可分爲CH和CL;索引
DX可分爲DH和DL;
8086 有14個16位寄存器,這14個寄存器按其用途可分爲4類:通用寄存器、指令指針、標誌寄存器、段寄存器。
通用寄存器有8個,又能夠分紅2組,一組是數據寄存器(4個),另外一組是指針寄存器及變址寄存器(4個)。
顧名思義,通用寄存器是那些你能夠根據本身的意願使用的寄存器,修改他們的值一般不會對計算機的運行形成很大的影響。
數據寄存器分爲:
AH&AL=AX(accumulator):累加寄存器,經常使用於運算;在乘除等指令中指定用來存放操做數,另外,全部的 I/O 指令都使用這一寄存器與外界設備傳送數據。
BH&BL=BX(base):基址寄存器,經常使用於地址索引。
CH&CL=CX(count):計數寄存器,經常使用於計數;經常使用於保存計算值,如在移位指令、循環(loop)和串處理指令中用做隱含的計數器。
DH&DL=DX(data):數據寄存器,經常使用於數據傳遞。
他們的特色是,這4個16位的寄存器能夠分爲高8位: AH, BH, CH, DH.以及低八位:AL,BL,CL,DL。這2組8位寄存器能夠分別尋址,並單獨使用。
另外一組是指針寄存器和變址寄存器,包括:
SP(Stack Pointer):堆棧指針,與SS配合使用,可指向目前的堆棧位置
BP(Base Pointer):基址指針寄存器,可用做SS的一個相對基址位置
SI(Source Index):源變址寄存器,可用來存放相對於DS段之源變址指針
DI(Destination Index):目的變址寄存器,可用來存放相對於ES 段之目的變址指針。
這4個16位寄存器只能按16位進行存取操做,主要用來造成操做數的地址,用於堆棧操做和變址運算中計算操做數的有效地址。
字節:記爲byte,由8個bit組成。
字:記爲word,分爲高位字節和低位字節。
任務:練習二進制、十六進制、十進制之間轉換。
全部的內存單元構成的存儲空間是一個一維的線性空間,每個內存單元在這個空間中都有惟一的地址,咱們將這個惟一的地址稱爲物理地址。
CPU訪問內存單元時,必須向內存提供內存單元的物理地址。8086CPU 在內部用段地址和偏移地址移位相加的方法造成最終的物理地址。不一樣CPU能夠有不一樣的造成物理地址的方式。
16位結構(16位機字長爲16位等常見說法,與16位結構的含義相同)描述了一個CPU具備下面幾方面的結構特性。
運算器一次最多能夠處理16位的數據;
寄存器的最大寬度爲16位。
物理地址=段地址×16+偏移地址
其本質含義是:CPU在訪問內存時,用一個基礎地址(段地址×16)和一個相對於基礎地址的偏移地址相加,給出內存單元的物理地址。
在編程時能夠根據須要,將若干地址連續的內存單元看做一個段,用段地址×16定位段的起始地址(基礎地址),用偏移地址定位段中的內存單元。
注意兩點:段地址×16必然是16的倍數,因此一個段的起始地址也必定是16的倍數;偏移地址爲16位,16位地址的尋址能力爲64KB,因此一個段的長度最大爲64KB。
CPU能夠用不一樣的段地址和偏移地址造成同一個物理地址。
能夠根據須要,將地址連續、起始地址爲16的倍數的一組內存單元定義爲一個段。
段地址在8086CPU的段寄存器中存放。當8086CPU 要訪問內存時,由段寄存器提供內存單元的段地址。
8086CPU 有4個段寄存器:CS、DS、SS、ES。其中CS用來存放指令的段地址。
CS(Code Segment):代碼段寄存器。
DS(Data Segment):數據段寄存器。
SS(Stack Segment):堆棧段寄存器。
ES(Extra Segment):附加段寄存器。
CS存放指令的段地址,IP存放指令的偏移地址。
8086機中,任意時刻,CPU將CS:IP指向的內容看成指令執行。
8086CPU的工做過程:
①從CS:IP指向的內存單元讀取指令,讀取的指令進入指令緩衝器;
②IP指向下一條指令;
③執行指令。(轉到步驟①)
下面用圖2.11~2.19來講明。
傳送指令:如mov指令等,不能用來修改CS、IP。緣由是8086CPU 沒有提供這樣的功能。(?)
轉移指令:如jmp指令等,能夠用來修改CS、IP。
將一個段用來存放代碼,從而定義了一個代碼段。
主要是學習debug的使用,並跟蹤程序的運行。該實驗已完成。
Debug是DOS‘Windows都提供的實模式程序的調試工具。使用它,能夠查看CPU各類寄存器中的內容、內存的狀況和在機器碼級跟蹤程序的運行。
暫時掌握如下Debug功能。
用 R 命令查看、改變CPU寄存器的內容;
用 D 命令查看內存中的內容;
用 E 命令改寫內存中的內容;
用 U 命令將內存中的機器指令翻譯成彙編指令;
用 T 命令執行一條機器指令;
用 A 命令以彙編指令的個事在內存中寫入一條機器指令。
Debug 比較強大,功能較多,之後有須要再詳細學習。
注意:64位系統已經沒有Debug了,聽說是不支持16位。