ARM64學習--assembly language
語言之間的關系
高級語言-->匯編語言-->機器語言-->計算機
- 匯編語言與機器語言一一對應,每一條機器指令都有與之對應的匯編指令。
- 匯編語言可以通過編譯得到機器語言,機器語言可以通過反編譯得到匯編語言。
- 高級語言可以通過編譯得到匯編語言、機器語言,但是匯編語言\機器語言幾乎不可能還原為高級語言。(還原高級代碼比較復雜)
匯編語言的特點
- 可以直接訪問、控制各種硬件設備,比如存儲器、CPU等,能最大限度的發揮硬件的功能。
- 能夠不受編譯器的限制,對生成的二進制代碼進行完全的控制。
- 目標代碼剪短,占用內存少,執行速度快。
- 匯編指令是機器指令的助記符,同機器指令一一對應。每一種CPU都有自己的機器指令集\匯編指令集,所以匯編語言不具備可移植性。
- 開發者需要對CPU等硬件設備有所了解,不易于編寫、維護、調試。
- 不區分大小寫。
匯編的用途
- 編寫驅動程序、操作系統(比如Linux內核的某些關鍵部分)。
- 針對性能要求極高的程序或者代碼,可與高級語言混合使用(內聯匯編)。
- 軟件安全(病毒分析和防治、逆向\加殼\脫殼\破解\外掛\免殺\加密解密\漏洞\黑客)
- 理解整個計算機系統的最佳起點和最有效的途徑。
- 為編寫高效代碼打下基礎。
- 弄清楚代碼的本質。
匯編語言的種類
目前比較多的匯編語言有:
* 8086匯編
* Win32
* Win64
* ARM匯編(嵌入式、Mac、iOS)
iPhone里面用到的ARM匯編,因CPU的架構不同
armv6:iPhone、iPhone2、iPhone3G、第一代、第二代iPod Touch
armv7:iPhone3GS、iPhone4、iPhone4S、iPad2、iPad3、iPad mini、iPod Touch 3G、iPod Touch4
armv7s:iPhone5、iPhone5C、iPad4
arm64:iPhone5S以后。
常識
App執行過程:
本地磁盤--(裝載)-->內存--(讀寫)-->CPU--(控制)-->屏幕、音響、藍牙、其他設備。
匯編 中大部分指令都和CPU、內存有關。
總線:
地址總線:它的寬度決定了CPU的尋址能力。8086:20根、1M的尋址能力。
數據總線:它的寬度決定了CPU的單次數據傳輸量,也就是數據的傳送速度。8086:16根、2個字節
控制總線:它的寬度決定了CPU對其他期間的控制能力、可以有多少種控制。