X86彙編1.彙編語言基礎

最近學習了X86彙編,其實無論是古老的8086還是現在i3/5/7/9,Xeon3/5,在最基本原理上,都是相通的,只是CPU位數,尋址空間,寄存器個數,指令集的擴充等方面有所不同,對於學習,8086永不過時。

1.比特、字節、字、雙字
在計算機中:
1比特:1位
1字節:8位
1字:16位 ,15-8(高字節)---> 7-0(低字節)
1雙字:31-16(高字)---> 15-0(低字)

2.指令和指令集
機器指令就是一列二進制數字,計算機將之轉變爲一列高低電平,以使計算機的電子器件受到驅動,進行運算。
機器語言就是機器指令的集合。
指令一般由操作碼和操作數構成,也有些指令只有操作碼,沒有操作數。
小端序:或叫低端字節序,內存高字節存放在高地址,內存的低字節保存在低地址
大端序:與小端序相反
指令和數據爲什麼要分開存放: 因爲指令和數據都是二進制數,是一模一樣的,即:都是一些由高低電平組和,而處理器是自動按順序提取指令並加以執行的,在指令中混雜數據會導致處理器不能正常工作,因此,指令和數據要分開存放。存放代碼的區域叫代碼區,存放數據的區叫數據區,聯想一下:一個二進制程序的代碼段和數據段也是分開存放的。

3.彙編語言
處理器都是依靠機器指令來工作的,但是機器指令是一些沒有規律的數字,編寫機器指令的程序,難以書寫,難以閱讀,難以理解,這樣就發明了彙編語言。
彙編指令就是機器指令便於記憶的書寫格式,有對應的機器碼。
僞指令就是沒有對應機器碼,由編譯器執行,計算機並不執行。

彙編指令---(編譯器)--->機器指令,即:MOV ax, bx ---(編譯器)---> 10001000111011000
寄存器:CPU可以存儲數據的器件

4.CPU對存儲單元的讀寫
CPU要進行數據的讀寫,必須和外部器件進行三類交互:存儲單元的地址(地址信息),器件選擇,讀寫命令(控制信息),讀寫的數據(數據信息)
那麼,CPU通過什麼交互這三種信息呢?答案是:總線,即:地址總線、控制總線、數據總線。
如:從存儲芯片中讀取數據
(1)CPU通過地址總線將地址信息(如:0x0001)發出
(2)CPU通過控制總線發出內存讀命令,選中存儲芯片,並通知存儲芯片要從中讀取數據
(3)存儲器將地址信息(如:0x0001)中的數據通過數據總線送入CPU
如:向存儲芯片寫入數據
(1)CPU通過地址總線將地址信息(如:0x0002)發出
(2)CPU通過控制總線發出內存寫命令,選中存儲芯片,並通知存儲芯片要寫入數據
(3)CPU通過數據總線將數據送入存儲芯片地址(如:0x0002)
地址總線:
我們知道CPU是通過總線來指定存儲單元的,如果一個CPU有10根地址總線,那麼他的尋址空間就是0~1023,即:0x0~0x3FF,地址總線寬度決定了CPU的尋址能力。
數據總線:
CPU與內存或其他芯片之間傳遞數據是通過數據總線進行的,數據總線的寬度就決定了數據傳輸速度,8根數據總線,一次可以傳遞8位(bit)二進制數據,16根總線就可以一次傳遞2字節數據。數據總線決定了CPU一次傳輸數據量。
控制總線:
CPU對於外部器件(外部芯片)的控制是通過控制總線完成的,有多少根控制總線,就意味着CPU對外提供了多少種控制,所以控制總線決定了CPU的控制能力。

5.內存地址空間
BIOS:Base Input/Output System,基本輸入輸出系統
內存、網卡、顯卡等外部芯片,雖然都是獨立器件,但是在以下兩點是相同的:
(1)都和CPU的總線相連
(2)CPU對他們進行讀和寫的時候,都通過控制線發出內存讀寫命令
也就是說,CPU對這些設備操控的時候,都作爲內存來對待,把他們都看成一個由若干個存儲單元組成的邏輯存儲器,這個邏輯存儲器就是我們所說的內存地址空間,在彙編語言中,我們所面對的就是內存地址空間。
即:邏輯存儲器(假想的)= 內存+網卡內存+顯卡顯存 + ...... (或者叫映射,將這些器件的物理地址映射到邏輯存儲器的邏輯地址,每個器件佔一段邏輯地址,CPU對這段邏輯地址讀寫,就是對真實器件的讀寫)
邏輯存儲器的大小就取決於上面說的CPU的尋址空間(也就是看有幾根數據總線)

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