彙編語言-第二章 寄存器(CPU工做原理)

概述

一個典型的CPU由運算器、控制器、寄存器等器件構成,這些器件靠內部總線相鏈接。 內部總線實現CPU內部各個器件之間的聯繫,外部總線實現CPU和主板上其餘器件的聯繫。程序員

簡單來講,在CPU中:編程

  • 運算器進行信息處理
  • 寄存器進行信息存儲
  • 控制器控制各類器件進行工做
  • 內部總線鏈接各類器件,在它們之間進行數據的傳送

寄存器是CPU中程序員能夠用指令讀寫的部件。程序員經過改變各類寄存器中的內容來實現對CPU的控制。 不一樣的CPU,寄存器的個數、結構是不一樣的。指針

2.1 通用寄存器

通用寄存器一般用來存放通常性的數據。code

2.2 字在寄存器中的存儲

出於對兼容性的考慮,8086CPU能夠一次性處理兩種尺寸的數據:內存

  • 字節:記爲byte,一個字節由8個比特(即二進制位)組成,能夠存在8位寄存器中。
  • 字:記爲word,一個字由兩個字節組成,這兩個字節分別稱爲這個字的高位字節和低位字節。

2.3 幾條彙編指令

2.4 物理地址

CPU經過地址總線送入存儲器的必須是一個內存單元的物理地址。 在CPU向地址總線上發出物理地址以前,必須在內部先造成這個物理地址。 不一樣的CPU能夠有不一樣的造成物理地址的方式。基礎

2.5 16位結構的CPU

16位結構的CPU具備下面幾方面的結構特性:兼容性

  • 運算器一次最多能夠處理16位的數據
  • 寄存器最大寬度爲16位
  • 寄存器和運算器之間的通路爲16位

內存單元的地址在送上地址總線以前,必須在CPU中處理、傳輸、暫時存放,對於16位CPU,能一次性處理、傳輸、暫時存儲16位的地址。原理

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

8086CPU有20位地址線,能夠傳送20位地址,達到1MB的尋址能力。
8086CPU又是16位結構,在內部一次性處理、傳輸、暫時存儲的地址爲16位。
從8086CPU的內部結構來看,若是將地址從內部簡單地發出,那麼它只能送出16位的地址,表現出的尋址能力只有64KB。
事實上,8086CPU採用一種在內部用兩個16位地址合成的方法來造成一個20位的物理地址。二進制

8086CPU相關部件的邏輯結構如圖所示: 8086CPU相關部件的邏輯結構.jpg 當8086CPU要讀寫內存時:
(1).CPU中的相關部件提供兩個16位地址,一個稱爲段地址,一個稱爲偏移地址
(2).段地址和偏移地址經過內部總線送入一個稱爲地址加法器的部件
(3).地址加法器將兩個16位地址合併成喲個20位物理地址
(4).地址加法器經過內部總線將20位物理地址送入輸入輸出控制電路
(5).輸入輸出控制電路將20位物理地址送上地址總線
(6).20位物理地址被地址總線傳送到存儲器
地址加法器採用物理地址=段地址X16+偏移地址的方法用段地址和偏移地址合成物理地址。程序

2.7 「段地址×16+偏移地址=物理地址」的本質含義

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

更通常的說,8086CPU這種尋址功能是「基礎地址+偏移地址=物理地址」尋址模式的一種具體實現方案。8086CPU中,段地址×16能夠看做是基礎地址。

2.8段的概念

"段地址"中的「」的概念,其實來自於CPU。內存並無分段,段的劃分來自於CPU。

2.9段段寄存器

段地址在8086CPU的段寄存器中存放。
8086有4個段寄存器:CS,DS,SS,ES。

2.10 CS和IP

當8086CPUCPU要訪問內存時由這4個段寄存器提供內存單元的段地址。

CS和IP是8086CPU中兩個最關鍵的寄存器,他們指示了CPU當前要讀取指令的地址。

  • CS爲代碼段寄存器
  • IP爲指令指針寄存器

在8086PC中,任意時刻,設CS中的內容爲M,IP中的內容爲N,8086CPU將從內存M×16+N單元開始,讀取一條指令並執行。
也能夠描述爲:8086機中,任意時刻,CPU將CS:IP指向的內容看成指令執行。

如圖顯示了8086CPU讀取、執行指令的工做原理:
8086CPU讀取和執行命令的相關部件.jpg

  • 8086CPU當前狀態:CS中的內容爲2000H,IP中的內容爲1000H
  • 內存20000H~20009H單元中存放着可執行的機器碼

2.11 修改CS、IP的指令

在CPU中,程序員可以用指令讀寫的部件只有寄存器,程序員能夠經過改變寄存器的內容實現對CPU的控制。 CPU從何處執行指令是由CS、IP中的內容決定的,程序員能夠經過改變CS、IP中的內容來控制CPU執行目標指令。
8086CPU大部分寄存器的值,均可以經過mov指令來改變。mov指令被稱爲傳送指令
mov指令不能用於設置CS、IP的值,緣由是:8086沒有提供這樣的功能。
可以改變CS、IP的內容的指令被統稱爲轉移指令

指令:jmp 某一合法寄存器 功能:用寄存器中的值修改IP的值

例如:

jmp ax
執行命令前:ax=1000H,CS=2000H,IP=0003H
執行命令後:ax=1000H,CS=2000H,IP=1000H
jmp bx
執行命令前:bx=0B16H,CS=2000H,IP=0003H
執行命令後:bx=0B16H,CS=2000H,IP=0B16H

jmp ax,其實就是用ax將IP的值覆蓋

2.12 代碼段

對於8086PC機,在編程時,能夠根據須要,將一組內存單元定義爲一段。能夠將長度爲N(N<=64KB5)的一組代碼,存在一組地址連續、起始地址爲16的倍數的內存單元中。存在這段內存單元中的代碼能夠成爲一個代碼段。

例如:

mov ax,0000          (B8 00 00)
add  ax,0123          (05 23 01)
mov bx,ax              (8B D8)
jmp bx                    (FF E3)
這段長度爲10字節的指令,存在從123B0H~123BAH的一組內存單元中,    
咱們就能夠認爲123B0H~123BAH這段內存是用來存放代碼的,是一個代碼段,它的段地址爲123BH,長度爲10字節

將一段內存看成代碼段,僅僅是咱們在編程時的一種安排,CPU並不會因爲這種安排,就自動的將咱們定義的代碼段中的指令看成指令來執行。
CPU只認被CS:IP指向的內存單元中的內容爲指令。
要讓CPU執行咱們放在代碼段中的指令,必需要將CS:iP指向所定義的代碼段中的第一條指令的首地址。

2.9節~2.12節 小結

  • 段地址在8086CPU的段寄存器中存放。當8086CPU要訪問內存時,由段寄存器提供內存單元的段地址。8086CPU有4個段寄存器,其中CS用來存放指令的段地址。
  • CS存放指令的段地址,IP存放指令的偏移地址。
  • 8086機中,任意時刻,CPU將CS:IP指向的內容看成指令執行
  • 8086CPU的工做過程:
    (1)從CS:IP指向內存單元讀取指令,讀取的指令進入指令緩衝器
    (2)IP指向下一條指令
    (3)執行指令
    (4)轉到步驟(1),重複這個過程
  • 8086CPU提供轉移指令修改CS、IP的內容。
相關文章
相關標籤/搜索