組合語言學習筆記03——暫存器(CPU工作原理)

我想當個程式設計師發表於2020-10-04

引言

在筆記01和02我們主要學習了CPU的外部通訊,即CPU如何和其他的器件去聯絡。
而現在呢我們要學習的是內部通訊,即CPU內部是如何工作的。

這一段的內容重點在段暫存器上,包括偏移地址 實體地址等。

由於將基礎知識分為第一大塊內容,所以我們現在從 2 來命名

2.1 CPU的概述

一個典型的CPU有運算器、控制器、暫存器等器件組成,這些器件需要靠內部匯流排相連。

那麼我們之前學的地址匯流排等等三種匯流排又是什麼呢?和CPU內部的匯流排不一樣,它們統稱為外部匯流排。 外部匯流排主要負責的是實現CPU和主機板上各個器件之間的聯絡。

CPU的組成

  • 運算器進行資訊處理。主要有一些算術邏輯單元組成。
  • 暫存器進行資訊儲存。CPU內部用於儲存資料的單元
  • 控制器協調各種器件進行工作。

2.2 暫存器

暫存器是CPU內部的資訊儲存單元

還是以8086CPU來舉例,其共有14個暫存器:

  • 通用暫存器:AX, BX, CX, DX。一般用於儲存運算過程中的臨時資料。
  • 變址暫存器:SI, DI
  • 指標暫存器:SP, BP
  • 指令指標暫存器:IP
  • 段暫存器:CS, SS, DS, ES
  • 標誌暫存器:PSW

共性:8086CPU所有的暫存器都是16位的,可以存放兩個位元組

2.2.1 通用暫存器

我們以AX為例。

這是一個16位的暫存器,用來儲存一個16位的資料,它所能儲存的最大值顯然是2的16次方-1(因為都是二進位制儲存),用16位表示最大值則是FFFFH。

那我們現在來儲存18D(D是十進位制)這個資料。
在這裡插入圖片描述

以上是這些通用暫存器的儲存形式,BX,CX等都是一樣的。

現在來想一個問題,8086是16位的,那我們現在都是64位的,再往前8088是8位的,這樣就導致後代的CPU編寫出來的程式,在前代沒法用,那又如何去保證程式的相容性呢?

方法是:將通用暫存器分為兩個獨立的8位暫存器。即我們上次說過的高低位——AX分為AH(high)和AL(low),這樣就可以和上一代的8位暫存器適配了。

在這裡插入圖片描述
我們不難發現,十六進位制的4E20很容易對應出來其二進位制,而十進位制在分開後就不是很直觀,所以我們在學習組合語言的時候,要習慣用過十六進位制。

AX可以分為AH和AL,其他的通用暫存器也是同樣的。

2.22 變址暫存器——SI DI

由於網課的安排並沒有一下子就講完所有的暫存器,所以這裡等講到了我會補上。

2.23 指標暫存器——SP BP

由於網課的安排並沒有一下子就講完所有的暫存器,所以這裡等講到了我會補上。

2.24 指令指標暫存器——IP

由於網課的安排並沒有一下子就講完所有的暫存器,所以這裡等講到了我會補上。

2.25 段暫存器——CS SS DS ES

由於網課的安排並沒有一下子就講完所有的暫存器,所以這裡等講到了我會補上。

2.26 標誌暫存器——PSW

由於網課的安排並沒有一下子就講完所有的暫存器,所以這裡等講到了我會補上。

相關文章