本篇主要記載匯編語(yǔ)言中常用的指令及其代表的含義狱掂,實(shí)時(shí)不斷跟新。
? ? CMP?
?w0 , w1 ?CMP (compare)的意思是比較的意思 相當(dāng)于將w0減去w1但是不會(huì)改變兩個(gè)寄存器的值即兩個(gè)寄存器不會(huì)變化,但是其結(jié)果會(huì)影響cpsr狀態(tài)寄存器的標(biāo)記值(nzcv)。
(把一個(gè)寄存器的內(nèi)容和另一個(gè)寄存器的內(nèi)容或立即數(shù)進(jìn)行比較。但不存儲(chǔ)結(jié)果灸异,只是正確的更改標(biāo)志府适。)
? ?BL?
?跳轉(zhuǎn)到標(biāo)號(hào)處執(zhí)行
? ?B.LE ? loc_1000068E0 (標(biāo)號(hào))
小于判斷LE是(less than or equal to)的意思當(dāng)結(jié)果為小于等于的時(shí)候跳轉(zhuǎn)執(zhí)行l(wèi)oc_1000068E0(標(biāo)號(hào))地址pc寄存器的程序。(配合CMP做if判斷)肺樟。
? ?B.GE ??loc_1000068D0(標(biāo)號(hào))
大于等于判斷(great than or equal to)原理同B.LE檐春。
注:LE 和 GE 對(duì)應(yīng)的高級(jí)代碼是反向的即匯編是大于等于那么實(shí)際上高級(jí)代碼是小于兩者互補(bǔ)。
? ? B.GT ?
比較結(jié)果是大于(greater than)么伯,執(zhí)行標(biāo)號(hào)疟暖,否則不跳轉(zhuǎn)。
? ? B.LT ?
?比較結(jié)果是大于(less?than)田柔,執(zhí)行標(biāo)號(hào)俐巴,否則不跳轉(zhuǎn)
? ? B.EQ?
?比較結(jié)果是等于(equal to),執(zhí)行標(biāo)號(hào),否則不跳轉(zhuǎn)
? ? B.HI?
?比較結(jié)果是無(wú)符號(hào)大于,執(zhí)行標(biāo)號(hào)亮靴,否則不跳轉(zhuǎn)
adrp x0, 1 計(jì)算指定數(shù)據(jù)地址到當(dāng)前pc值的相對(duì)偏移。操作步驟如下
1. 將1的值,左移12位 1 0000 0000 0000 == 0x1000
2.將PC寄存器的低12位清零 0x1045228b0 ?==> 0x104522000
3.將將1 和 2 的結(jié)果相加? 給 X0 寄存器
注:地址為pc寄存器左邊的地址缘圈,adrp是找出要獲取參數(shù)的地址范圍,然后下個(gè)pc寄存器執(zhí)行的代碼會(huì)定位到準(zhǔn)確的物理地址袜蚕。(一般找到范圍后下一句會(huì)add 后三位的具體地址從而確定具體值)糟把。
LDRSW x9 ,[x8 ,x9 ,lsl #2] 為將以x8寄存器為基地址加上x(chóng)9寄存器向左偏移兩個(gè)單位的值后取其地址的值給x9寄存器。
Load Signed Word (extended): loads a word from memory addressed by addr, then sign-extends it into Xt.
讀取內(nèi)存地址的值給寄存器廷没。