《彙編語言》第2章

在CPU中:編程

  • 運算器進行信息處理工具

  • 寄存器進行信息存儲oop

  • 控制器控制各類器件進行工做學習

  • 內部總線鏈接各類器件,在它們之間進行數據的傳送spa

8086CPU 有 14個寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。翻譯

2.1 通用寄存器

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位進行存取操做,主要用來造成操做數的地址,用於堆棧操做和變址運算中計算操做數的有效地址。

2.2 字在寄存器中的存儲

字節:記爲byte,由8個bit組成。

字:記爲word,分爲高位字節和低位字節。
任務:練習二進制、十六進制、十進制之間轉換。

2.4 物理地址

全部的內存單元構成的存儲空間是一個一維的線性空間,每個內存單元在這個空間中都有惟一的地址,咱們將這個惟一的地址稱爲物理地址。
CPU訪問內存單元時,必須向內存提供內存單元的物理地址。8086CPU 在內部用段地址和偏移地址移位相加的方法造成最終的物理地址。不一樣CPU能夠有不一樣的造成物理地址的方式。

2.5 16位結構的CPU

16位結構(16位機字長爲16位等常見說法,與16位結構的含義相同)描述了一個CPU具備下面幾方面的結構特性。

  • 運算器一次最多能夠處理16位的數據;

  • 寄存器的最大寬度爲16位。

2.6 8086CPU給出物理地址的方法

物理地址=段地址×16+偏移地址
其本質含義是:CPU在訪問內存時,用一個基礎地址(段地址×16)和一個相對於基礎地址的偏移地址相加,給出內存單元的物理地址。

2.8 段的概念

在編程時能夠根據須要,將若干地址連續的內存單元看做一個段,用段地址×16定位段的起始地址(基礎地址),用偏移地址定位段中的內存單元。
注意兩點:段地址×16必然是16的倍數,因此一個段的起始地址也必定是16的倍數;偏移地址爲16位,16位地址的尋址能力爲64KB,因此一個段的長度最大爲64KB。
CPU能夠用不一樣的段地址和偏移地址造成同一個物理地址。
能夠根據須要,將地址連續、起始地址爲16的倍數的一組內存單元定義爲一個段。

2.9 段寄存器

段地址在8086CPU的段寄存器中存放。當8086CPU 要訪問內存時,由段寄存器提供內存單元的段地址。
8086CPU 有4個段寄存器:CS、DS、SS、ES。其中CS用來存放指令的段地址。
CS(Code Segment):代碼段寄存器
DS(Data Segment):數據段寄存器
SS(Stack Segment):堆棧段寄存器
ES(Extra Segment):附加段寄存器

2.10 CS和IP

CS存放指令的段地址,IP存放指令的偏移地址。

8086機中,任意時刻,CPU將CS:IP指向的內容看成指令執行。

8086CPU的工做過程:

①從CS:IP指向的內存單元讀取指令,讀取的指令進入指令緩衝器;

②IP指向下一條指令;

③執行指令。(轉到步驟①)

下面用圖2.11~2.19來講明。

2.11 修改CS、IP的指令

傳送指令:如mov指令等,不能用來修改CS、IP。緣由是8086CPU 沒有提供這樣的功能。(?)

轉移指令:如jmp指令等,能夠用來修改CS、IP。

2.12 代碼段

將一個段用來存放代碼,從而定義了一個代碼段。

實驗一

主要是學習debug的使用,並跟蹤程序的運行。該實驗已完成。

Debug工具

Debug是DOS‘Windows都提供的實模式程序的調試工具。使用它,能夠查看CPU各類寄存器中的內容、內存的狀況和在機器碼級跟蹤程序的運行。

暫時掌握如下Debug功能。

  • 用 R 命令查看、改變CPU寄存器的內容;

  • 用 D 命令查看內存中的內容;

  • 用 E 命令改寫內存中的內容;

  • 用 U 命令將內存中的機器指令翻譯成彙編指令;

  • 用 T 命令執行一條機器指令;

  • 用 A 命令以彙編指令的個事在內存中寫入一條機器指令。

Debug 比較強大,功能較多,之後有須要再詳細學習。

注意:64位系統已經沒有Debug了,聽說是不支持16位。

相關文章
相關標籤/搜索