最近準備學習彙編,而後在B站上看到叫iOS小賢的做者發的視頻挺不錯,打算跟着學,文章是看視頻的筆記,最後有原視頻連接,想看視頻的能夠看看經過連接查看視頻。程序員
ARM64擁有有31個64位的通用寄存器 x0 到 x30,這些寄存器一般用來存放通常性的數據,稱爲通用寄存器(有時也有特定用途)xcode
模擬器是X86架構,因此用真機測才能看到ARM62的寄存器緩存
**注:**爲何是64位寄存器,由於CPU是64位的,總線是64位的,一次通電能夠傳遞64位的數據給CPU,也就是8個字節,這個數據CPU存在寄存器中,因此寄存器是64位的。bash
問: 每次計算完又開闢內存空間存放結果?
答:彙編裏面不存在開闢空間,銷燬空間,直接經過內存地址訪問,和高級語言不同。架構
0x102aaa928 <+0>: sub sp, sp, #0x10
左邊是指令地址,右邊是指令。less
Debug -> Debug Workflow -> View Memory 或者經過快捷鍵:shift+command + m 來調用內存查看界面ide
0x102aaa92c - 0x102aaa928 = 4
,因此每一個指令戰4個字節。函數
FF 43 00 D1
就是指令sub sp, sp, #0x10
的二進制表現形式。性能
能夠在LLDB輸入ni
單步往下走,發現依然斷點地址依然和pc寄存器同樣的。學習
輸入register write pc 0x102aaa92c
改寫pc寄存器,能夠看到跳轉到改寫後地址的下一個寄存器位置。
注:#
後面跟個數字,叫當即數,
如今有兩段代碼!假設程序先執行A,請寫出指令執行順序.最終寄存器x0的值是多少?
_A:
mov x0,#0xa0
mov x1,#0x00
add x1, x0, #0x14
mov x0,x1
bl _B
mov x0,#0x0
ret
_B:
add x0, x0, #0x10
ret
複製代碼
咱們來寫試試看,在xcode中建立文件,格式選擇Assembly File
.text
告訴編譯器在text段,也就是代碼段,.global
表示是全局的。 在.m文件中須要加上方法聲明int A();
,這樣編譯才能經過,由於asm.s是源文件,編譯的會連接到全局函數_A。
在A()打斷點
輸入s進入函數A
咱們能夠看到x0就是a0,此時x1是50輸入ni
單步往下走,x1變成0
add x1, x0, #0x14
是把x0加上14而後賦值給x1,這樣x1就變成b4。
mov x0, x1
是把x1的值賦值給x0,這樣x0和x1都是b4。
接下來bl 0x102df2c00
跳轉到B函數。
而後一直輸入ni,會發現死循環了,至於爲何以後會解釋。
CPU除了有控制器、運算器還有寄存器。其中寄存器的做用就是進行數據的臨時存儲。
CPU的運算速度是很是快的,爲了性能CPU在內部開闢一小塊臨時存儲區域,並在進行運算時先將數據從內存複製到這一小塊臨時存儲區域中,運算時就在這一小快臨時存儲區域內進行。咱們稱這一小塊臨時存儲區域爲寄存器。
對於arm64系的CPU來講, 若是寄存器以x開頭則代表的是一個64位的寄存器,若是以w開頭則代表是一個32位的寄存器,在系統中沒有提供16位和8位的寄存器供訪問和使用。其中32位的寄存器是64位寄存器的低32位部分並非獨立存在的。
**注:**若是你改了x0寄存器,w0寄存器也會改,由於32位的寄存器是64位寄存器的低32位部分並非獨立存在的。
iPhoneX上搭載的ARM處理器A11它的1級緩存的容量是64KB,2級緩存的容量8M.
CPU每執行一條指令前都須要從內存中將指令讀取到CPU內並執行。而寄存器的運行速度相比內存讀寫要快不少,爲了性能,CPU還集成了一個高速緩存存儲區域.當程序在運行時,先將要執行的指令代碼以及數據複製到高速緩存中去(由操做系統完成).CPU直接從高速緩存依次讀取指令來執行.
數據地址寄存器 數據地址寄存器一般用來作數據計算的臨時存儲、作累加、計數、地址保存等功能。定義這些寄存器的做用主要是用於在CPU指令中保存操做數,在CPU中當作一些常規變量來使用。 ARM64中
注意: 有一種特殊的寄存器段寄存器:CS,DS,SS,ES四個寄存器來保存這些段的基地址,這個屬於Intel架構CPU中.在ARM中並無
**注:**之前內存使用段劃分的,如今是平滑狀態,從0到最後,只是文件裏面分段,內存中再也不有段了。
由於浮點數的存儲以及其運算的特殊性,CPU中專門提供浮點數寄存器來處理浮點數
浮點寄存器 64位: D0 - D31 32位: S0 - S31
如今的CPU支持向量運算.(向量運算在圖形處理相關的領域用得很是的多)爲了支持向量計算系統了也提供了衆多的向量寄存器.
向量寄存器 128位:V0-V31
參考:
寄存器
關於CPU&寄存器的補充
彙編(二)
彙編(三)