棧
? ? 1.是一種具有特殊的訪(fǎng)問(wèn)方式的存儲(chǔ)空間(后進(jìn)先出,Last In Out firt苦丁,LIFO)
? ? 2.sp和FP寄存器
? ? ? ? (1)sp寄存器在任意時(shí)刻? 會(huì)保存我們棧頂?shù)牡刂?/p>
? ? ? ? (2)fp寄存器也成為x29寄存器,屬于通用寄存器笨枯,但是在某些時(shí)刻我們利用它保存棧底的地址
? ? 3.ARM64里面對(duì)棧的操作是16字節(jié)對(duì)齊的。
? ? 4.棧的讀寫(xiě)指令
? ? ? ? (1)讀:ldr(load register)指令LDR锯蛀、LDP
? ? ? ? (2)寫(xiě):str(store register)指令STR灭衷、STP
? ? 5.匯編練習(xí)
? ? ? ? (1)指令
? ? ? ? ? ? ? ? sub? ?sp , sp , #0x10? ? ?拉升棧空間16個(gè)字節(jié)
? ? ? ? ? ? ? ? stp? ? x0 , x1 , [sp]? ? ? ?往sp所在位置存放x0和x1
? ? ? ? ? ? (2)簡(jiǎn)寫(xiě)
? ? ? ? ? ? ? ? ? ? stp? x0 , x1 , [sp , #-0x10]!
bl指令
? ? 1.跳轉(zhuǎn)指令:bl標(biāo)號(hào)旁涤,標(biāo)明程序執(zhí)行到標(biāo)號(hào)處翔曲,將下一條指令的地址保存到lr寄存器里。?
? ? B 代表跳轉(zhuǎn)
? ? L 代表lr(x30)寄存器
ret
? ? 1.類(lèi)似函數(shù)中return
? ? 2.讓CPU執(zhí)行l(wèi)r寄存器所指向的指令
函數(shù)的參數(shù)
????1.ARM64中劈愚,參數(shù)放在x0到x7的8個(gè)寄存器中? ??
? ? 2.如果是浮點(diǎn)數(shù)瞳遍,就會(huì)用浮點(diǎn)寄存器
? ? 3.如果超過(guò)8個(gè)參數(shù)就會(huì)用棧傳遞
函數(shù)的返回值
? ? 1.一般函數(shù)的返回值使用x0寄存器保存
? ? 2.如果返回值超過(guò)8個(gè)字節(jié),就會(huì)利用內(nèi)存?zhèn)鬟f返回值菌羽。