彙編語言筆記

一、CPU是通過地址總線,數據總線,控制總線對內存(存儲器)進行讀寫操作

地址總線的根數決定了CPU的尋址能力,假設地址總線有10根,那麼CPU可以有2^10個不同的地址進行尋址。
數據總線 8088CPU的數據總線的寬度爲8,8086CPU的數據總線的寬度爲16。同樣的道理,數據總線的寬度決定了CPU一次能讀取的數據二進制位數有多大他們分別可以讀取最大爲2^8和2^16的數據。假設要讀取一個數據爲89D8H,8088CPU需要讀取兩次分別讀取爲89H和D8H。而8086CPU的話只需要進行一次讀取89D8H就可以了。
控制總線:CPU對外部器件的控制是通過控制總線來進行的。控制總線是一些控制線的集合。有多少根控制總線,就意味着CPU提供了對外部設備的多少種控制。所以控制總線的寬度決定了CPU對外部設備的控制能力。前面的數據總線讀寫數據是由控制線綜合發出的。其中有一根稱爲”讀信號輸出“的控制線負責由CPU向外發出讀信號。”寫信號輸出“負責由CPU向外發出寫信號。

在這裏插入圖片描述

上面那些存儲器,在物理上都是獨立的器件,但是他們都和CPU的總線相連。CPU對他們進行讀寫的時候都是通過總線發出的內存讀寫命令。

在這裏插入圖片描述
所有的物理存儲器被看做是一個由若干個存儲器單元構成的邏輯存儲器。每個物理存儲器在邏輯存儲器中佔用一個地址段,即一段地址空間。CPU在這一段地址空間進行讀寫數據,實際上就是在相應的物理存儲器中讀寫數據。

我們在基於一個計算機硬件系統編程的時候,必須知道這個系統中的內存地址空間分配情況。因爲當我們想在某類存儲器中讀寫數據的時候,必須知道它的第一個單元的地址和最後一個單元的地址,才能保證讀寫操作是在預期的存儲器中進行。
下面是8086CPU的內存地址分配情況:
在這裏插入圖片描述

一個典型的CPU由運算器,控制器,寄存器構成。
運算器進行信息處理;
寄存器進行信息存儲;
控制器控制各種器件進行工作;
之前所說的總線相對於CPU來說是外部總線,還有CPU的內部總線,內部總線實現CPU內部各個器件之間的聯繫。
8086CPU有14個不同的寄存器:
AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW

例:彙編編程計算2^4
mov ax, 2
mov ax, ax
mov ax, ax
mov ax, ax

二、8086CPU是如何在內部形成內存單元的物理地址的:

概況的講,一個16位的結構描述了一個CPU具有下面幾個特徵:
運算器一次最多可以處理16位的數據;
寄存器的寬度最大爲16位;
寄存器與運算器之間的通路爲16位;
也就是說在8086的內部,能夠一次性處理,傳輸,暫時存儲的信息的最大長度爲16位。
但是8086CPU有20位地址總線,可以傳送20位地址,尋址能力爲1MB,8086又是16位的結構,從內部看只能一次送出16位的地址,表現的尋址能力只有64KB。原來在8086CPU中採用了兩個16位地址合成的方法來形成一個20位的物理地址。

在這裏插入圖片描述

當CPU要讀寫內存時:
1.CPU的相關部件提供兩個16位的地址,一個是段地址,一個是偏移地址。
2.段地址和偏移地址通過內部地址總線送入一個稱爲地址加法器的部件;
3.地址加法器將兩個16位的地址和成爲一個20位的物理地址;
4.地址加法器通過內部總線將20位物理地址送入輸入輸出控制電路;
5.輸入輸出控制電路將20位物理地址送入外部地址總線;
6.20位的物理地址被地址總線送到存儲器。
地址加法器採用物理地址=段地址*16+偏移地址的方法合成物理地址。
*16 在不同的進製表現來看,2進製表示左移4位,16進製表示左移了1位

段寄存器提供段地址,8086CPU有4個不同的段寄存器:CS,DS,SS,ES
cs:ip 指向了CPU即將執行的指令的地址。
我們可以通過mov ax, 123;指令修改通用寄存器的值。但是如何修改cs:ip呢
使用jmp指令進行修改。 jmp 2ae3:3 ;執行後CS=2ae3h;IP=0003H。若指向修改IP的值可以使用:jmp ax等指令完成,它的含義可以理解爲:mov IP, ax;

mac下面使用Debug程序,安裝DOSBox:https://www.dosbox.com
運行DOSBox 後輸入下面的命令將自己創建的DOS目錄掛載到c盤:mount c ~/work/DOS

然後進入c盤開始運行debug.exe就可以進行測試啦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章