iOS彙編基礎(一)

meryin發表於2018-05-08

一 高階語言執行過程

iOS彙編基礎(一)

二 組合語言的特點

  • 可以直接訪問、控制各種硬體裝置,比如儲存器、CPU等,能最大限度地發揮硬體的功能

  • 能夠不受編譯器的限制,對生成的二進位制程式碼進行完全的控制

  • 目的碼簡短,佔用記憶體少,執行速度快

  • 彙編指令是機器指令的助記符,同機器指令一一對應。每一種CPU都有自己的機器指令集\彙編指令集,所以組合語言不具備可移植性

  • 知識點過多,開發者需要對CPU等硬體結構有所瞭解,不易於編寫、除錯、維護

  • 不區分大小寫,比如mov和MOV是一樣的

三 iPhone裡面用到的是ARM彙編

架構 裝置
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 iPhone5S 以後 iPhoneX , iPad Air, iPad mini2以後

四 APP/程式的執行過程

iOS彙編基礎(一)

  • 讀寫速度: 暫存器 > 快取記憶體 > 記憶體 > 磁碟
  • A11快取記憶體有8m。APP程式碼在磁碟上,啟動的時候,把程式碼讀到記憶體;即將執行的程式碼放到快取記憶體,快取記憶體與記憶體一一對映,暫存器先去快取記憶體找,找到對映關係後去尋找相應的記憶體,沒有找到去記憶體找,並儲存到快取記憶體中。 ###五 CPU通過匯流排跟外部器件進行互動
  • 每一個CPU晶片都有許多管腳,這些管腳和匯流排相連,CPU通過匯流排跟外部器件進行互動
  • 匯流排:一根根導線的集合
  • 匯流排的分類
    • 地址匯流排
    • 資料匯流排
    • 控制匯流排
      iOS彙編基礎(一)
1. 比如cpu讀取記憶體3的資料

cpu根據地址匯流排找到記憶體3,然後用控制匯流排控制資料匯流排讀寫3的資料

iOS彙編基礎(一)

2. 地址匯流排的寬度決定了CPU的_定址能力

比如8086的地址匯流排寬度是_20_,因為只有0和1兩種狀態,所以定址能力是_1M_( 2^20 )

3. 資料匯流排的寬度決定了CPU的單次資料傳送量,也就是資料_傳送速度_

比如8086的資料匯流排寬度是_16_,所以單次最大傳遞_2個位元組_的資料(因為一個位元組等於8位)

4. 控制匯流排的寬度決定了CPU對其他器件的_控制能力_、能有多少種控制

六 計算機中常見的資料寬度

  • 位(Bit): 1個位就是1個二進位制位.0或者1
  • 位元組(Byte): 1個位元組由8個Bit組成(8位).記憶體中的最小單元Byte.
  • 字(Word): 1個字由2個位元組組成(16位),這2個位元組分別稱為高位元組和低位元組.
  • 雙字(Doubleword): 1個雙字由兩個字組成(32位)
1. 有符號數幫組記憶
無符號數,直接換算!
有符號數:
正數:  0    1    2    3    4    5    6    7 
負數:  F    E    D    B    C    A    9    8
      -1   -2   -3   -4   -5   -6   -7   -8
複製程式碼

iOS彙編基礎(一)

2. 八進位制加法表
 0  1  2  3  4  5  6  7 
10 11 12 13 14 15 16 17
20 21 22 23 24 25 26 27
...

1+1 = 2						
1+2 = 3   2+2 = 4				
1+3 = 4   2+3 = 5   3+3 = 6
1+4 = 5   2+4 = 6   3+4 = 7   4+4 = 10  
1+5 = 6   2+5 = 7   3+5 = 10  4+5 = 11  5+5 = 12
1+6 = 7   2+6 = 10  3+6 = 11  4+6 = 12  5+6 = 13  6+6 = 14
1+7 = 10  2+7 = 11  3+7 = 12  4+7 = 13  5+7 = 14  6+7 = 15  7+7 = 16
複製程式碼
3. 八進位制乘法表
0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 22 23 24 25 26 27...
1*1 = 1						
1*2 = 2	  2*2 = 4				
1*3 = 3	  2*3 = 6	3*3 = 11	
1*4 = 4	  2*4 = 10	3*4 = 14  4*4 = 20
1*5 = 5	  2*5 = 12	3*5 = 17  4*5 = 24  5*5 = 31
1*6 = 6	  2*6 = 14	3*6 = 22  4*6 = 30  5*6 = 36  6*6 = 44
1*7 = 7	  2*7 = 16	3*7 = 25  4*7 = 34  5*7 = 43  6*7 = 52  7*7 = 61
複製程式碼

七 CPU的組成

  • 對程式設計師來說,CPU中最主要部件是暫存器,可以通過改變暫存器的內容來實現對CPU的控制
  • 不同的CPU,暫存器的個數、結構是不相同的
    iOS彙編基礎(一)
接下篇-暫存器

相關文章