匯編語言與其它語言的關(guān)系
image.png
匯編語言的特點(diǎn)
對于不同型號的計算機(jī),有著不同的結(jié)構(gòu)的匯編語言,匯編指令是機(jī)器指令的助記符,同機(jī)器指令一一對應(yīng)。每一種CPU都有自己的機(jī)器指令集\匯編指令集,所以匯編語言不具備可移植性
可以直接訪問、控制各種硬件設(shè)備,比如存儲器、CPU,所以比高級語言的執(zhí)行速度快
占用內(nèi)存空間少,高級語言通過編譯器轉(zhuǎn)換為匯編語言的時候會生成多余的代碼
能夠不受編譯器的限制,對生成的二進(jìn)制代碼進(jìn)行完全的控制
匯編語言比較難,不易于編寫、調(diào)試、維護(hù)
不區(qū)分大小寫,比如mov和MOV是一樣的
匯編語言的種類
8086匯編(8086處理器是16bit的CPU)
Win32匯編
Win64匯編
ARM匯編(嵌入式、Mac、iOS)
......
我們iPhone里面用到的是ARM匯編,但是不同的設(shè)備也有差異.因CPU的架構(gòu)不同.
架構(gòu) | 設(shè)備 |
---|---|
armv6 | iPhone, iPhone2, iPhone3G, 第一代、第二代 iPod Touch |
armv7 | iPhone3GS, iPhone4, iPhone4S,iPad, iPad2, iPad3(The New iPad), iPad mini, iPod Touch 3G, iPod Touch4 |
armv7s | iPhone5, iPhone5C, iPad4(iPad with Retina Display) |
arm64 | iPhone6s , iphone6s plus,iPhone6, iPhone6 plus,iPhone5S ,iPad Air, iPad mini2 |
總線
總線分為:地址總線(尋址),數(shù)據(jù)總線(傳輸數(shù)據(jù)),控制總線
- 地址總線決定尋址的能力,例如:8086的地址總線為20根,其尋址能力是2^20,1024 * 1024,既是1M.
- 數(shù)據(jù)總線決定單次可以傳輸?shù)淖畲髷?shù)據(jù)量,例如8086的數(shù)據(jù)總線有16根,單次最大能傳輸2個字節(jié)(一個字節(jié)8位,2個字節(jié)16位).
- 控制總線:它的寬度決定了CPU對其他器件的控制能力、能有多少種控制.
CPU通過芯片上的管腳與總線相連,讀取內(nèi)存中的指令,從而控制外部器件.
首先通過地址總線找到要訪問的內(nèi)存,然后由控制總線決定讀/寫,最后由數(shù)據(jù)總線傳輸數(shù)據(jù).
image.png
8086的尋址方式
- CPU訪問內(nèi)存單元時,要給出內(nèi)存單元的地址,所有的內(nèi)存單元都有唯一的地址,叫做物理地址
-
這里有個問題,8086有20根地址總線,有1M的尋址能力,而CPU是16位的,單次能處理的地址為16位,這樣表面上看尋址能力只有64K(2^16),那么后面的地址就找不到了嗎?實(shí)際上,8086采用一種在內(nèi)部用2個16位地址合成的方法來生成1個20位的物理地址,比如CPU要訪問21F60H單元,
image
image - 可以用 物理地址 = 段地址 * 16(基礎(chǔ)地址) + 偏移地址 這個公式來表示最終要訪問的地址,例如CPU要訪問21F60H時, 可以用 21F6H * 16 + 0H來表示.
- 基礎(chǔ)地址一般是16的倍數(shù),例如21F60H的基礎(chǔ)地址可以是21F6H * 16,也可以是21F5H * 16等等
- 由于偏移地址是16位的,所以其尋址能力最大是64KB.