1. 程式人生 > >計算機原始語言——匯編

計算機原始語言——匯編

images 不同 連續 ima roc acc -i cab nag

8086的尋址方式
CPU訪問內存單元時,要給出內存單元的地址,所有的內存單元都有唯一的地址,叫做物理地址

8086有20位地址總線,可以傳送20位的地址,1M的尋址能力

但它又是16位結構的CPU,它內部能夠一次性處理、傳輸、暫時存儲的地址為16位。如果將地址從內部簡單地發出,那麽它只能送出16位的地址,表現出來的尋址能力只有64KB

8086采用一種在內部用2個16位地址合成的方法來生成1個20位的物理地址

技術分享圖片

image.png

技術分享圖片

image.png

技術分享圖片

image.png

技術分享圖片

image.png

作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:656315826,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿裏面試題、面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。

內存分段管理
8086是用“基礎地址(段地址×16) + 偏移地址 = 物理地址”的方式給出物理地址

為了開發方便,我們可以采取分段的方法來管理內存,比如:

技術分享圖片

image.png

地址10000H~100FFH的內存單元組成一個段,該段的起始地址(基礎地址)為10000H,段地址為1000H,大小為100H

地址10000H1007FH、10080H100FFH的內存單元組成2個段,它們的起始地址(基礎地址)為:10000H和10080H,段地址為1000H和1008H,大小都為80H

在編程時可以根據需要,將若幹連續地址的內存單元看做一個段,用段地址×16定為段的起始地址(基礎地址),用偏移地址定位段中的內存單元

段地址×16必然是16的倍數,所以一個段的起始地址(基礎地址)也一定是16的倍數

偏移地址為16位,16位地址的尋址能力為64KB,所以一個段的長度最大為64KB

技術分享圖片

image.png

段寄存器
8086在訪問內存時要由相關部件提供內存單元的段地址和偏移地址,送入地址加法器合成物理地址

是什麽部件提供段地址?段地址在8086的段寄存器中存放

8086有4個段寄存器:CS、DS、SS、ES,當CPU需要訪問內存時由這4個段寄存器提供內存單元的段地址

CS (Code Segment):代碼段寄存器

DS (Data Segment):數據段寄存器

SS (Stack Segment):堆棧段寄存器

ES (Extra Segment):附加段寄存器

CS和IP
CS為代碼段寄存器,IP為指令指針寄存器,它們指示了CPU當前要讀取指令的地址

任意時刻,8086CPU都會將CS:IP指向的指令作為下一條需要取出執行的指令

技術分享圖片

image.png

技術分享圖片

image.png

指令的執行過程

技術分享圖片

12

技術分享圖片

13

技術分享圖片

14

技術分享圖片

15

技術分享圖片

16

技術分享圖片

17

技術分享圖片

18

技術分享圖片

19

技術分享圖片

21

技術分享圖片

22

技術分享圖片

23

技術分享圖片

24

技術分享圖片

25

技術分享圖片

26

技術分享圖片

總結

指令和數據
在內存或者磁盤上,指令和數據沒有任何區別,都是二進制信息

CPU在工作的時候把有的信息看做指令,有的信息看做數據,為同樣的信息賦予了不同的意義

技術分享圖片

image.png

CPU根據什麽將內存中的信息看做指令?

CPU將CS:IP指向的內存單元的內容看做指令

如果內存中的某段內容曾被CPU執行過,那麽它所在的內存單元必然被CS:IP指向過

jmp指令
CPU從何處執行指令是由CS、IP中的內容決定的,我們可以通過改變CS、IP的內容來控制CPU執行目標指令

8086提供了一個mov指令(傳送指令),可以用來修改大部分寄存器的值,比如

mov ax,10、mov bx,20、mov cx,30、mov dx,40

但是,mov指令不能用於設置CS、IP的值,8086沒有提供這樣的功能

8086提供了另外的指令來修改CS、IP的值,這些指令統稱為轉移指令,最簡單的是jmp指令

技術分享圖片

image.png

技術分享圖片

image.png

jmp指令 -- 練習
![image.png](http://upload-images.jianshu.io/upload_images/2990730-fde7c6e8497e3ffd.png?imageMogr 2/auto-orient/strip%7CimageView2/2/w/1240)

技術分享圖片

image.png

技術分享圖片

image.png

代碼段
技術分享圖片

image.png

技術分享圖片

image.png

技術分享圖片

image.png

作為一個開發者,有一個學習的氛圍跟一個交流圈子特別重要,這是一個我的iOS交流群:656315826,不管你是小白還是大牛歡迎入駐 ,分享BAT,阿裏面試題、面試經驗,討論技術, 大家一起交流學習成長!希望幫助開發者少走彎路。

計算機原始語言——匯編