1.寄存器
通用寄存器
? ?(1)64bit: x0-x28
? ?(2)32bit:w0-w28(屬于x0-x28低32bit)
? ?(3)x0-x7通常用來存放函數(shù)的參數(shù),更多的參數(shù)使用堆棧來傳遞
? ?(4)x0通常作為函數(shù)返回值
程序計(jì)數(shù)器
pc(Program Counter)? ??
記錄CPU當(dāng)前執(zhí)行的是哪一條指令
存儲著當(dāng)前CPU正在執(zhí)行的指令地址
類似于8086匯編的ip寄存器
堆棧指針
鏈接寄存器
lr(Link Register), 也就是x30
存儲著函數(shù)的返回地址
程序狀態(tài)寄存器
cpsr(current program status register)
2.指令
? ? (1)ret:返回
? ? ? ? ? ? 將lr(x30)寄存器的值賦值給pc
? ? (2)mov:全稱move,把后面內(nèi)容的移動到前面寄存器
? ? ? ? mov x0, #0x8
? ? (3)add:將后面x0+x1,賦給x2
? ? ? ? mov x0, #0x1
? ? ? ? mov x1, #0x2
? ? ? ? add x2,? x0, x1
????(4)sub:將后面x0-x1,賦給第x2
????????mov x0, #0x5
? ? ? ? mov x1, #0x2
? ? ? ? sub x2,? x0, x1
? ? (5)cmp:比較指令,x0 - x1,并根據(jù)結(jié)果設(shè)置CPSR的標(biāo)志位
? ? ? ? mov x0, #0x3
? ? ? ? mov x1, #0x1
? ? ? ? cmp x0, x1
? ? (6)b:跳轉(zhuǎn)指令,b直接跳轉(zhuǎn)到mycode對應(yīng)的地址
? ? ? ? b(條件) 目標(biāo)地址
? ? ? ? b mycode
? ? ? ? mov x0, #0x5
? ? ? ? mycode:
? ? ? ? mov x1, #0x6
? ? (7) bl:帶返回的跳轉(zhuǎn)指令
? ???????bl(條件) 目標(biāo)地址 (類似函數(shù)調(diào)用)
? ? ? ? 執(zhí)行的操作:(1)將下一條指令的地址存儲到lr(x30)寄存器中(2)跳轉(zhuǎn)到標(biāo)記處,執(zhí)行代碼
? ? (8)ldr:從內(nèi)存中讀取數(shù)據(jù)
? ? ? ? ldr x0, [x1]? ? ?;(x1里面存的是地址 取出一定大小的數(shù)據(jù)? 數(shù)據(jù)大小取決于x0的大小)
? ? ? ? ldr x0, [x1, #0x4]??(取x1中存的地址? 加上立即數(shù)0x4? , 最終地址中的數(shù)據(jù)? 賦給x0)
? ? ? ? ldr x0, [x1, #0x4]!? ? ;(同上? 多了一個 x1中的地址值? 等于最終地址值)
? ? (9)ldur:去內(nèi)存中的數(shù)據(jù)放到寄存器
????????ldur x0, [x1, #-0x4]? ? ? ? ;立即數(shù)為負(fù)
? ? (10)ldp:從內(nèi)存中讀取數(shù)據(jù),放到一對寄存器中(p是pair的簡稱,一對的意思)
? ? ? ? ldp w0, w1, [x1, #0x4]? ??
? ? (11)str:往內(nèi)存中寫入數(shù)據(jù)
? ? ? ? str w0,[x1, #0x4]? ? ? ;把w0寄存器中的數(shù)據(jù)放到x1內(nèi)存中? ? ? ??
? ? ? ? stur w0, [x1, #-0x4]
? ? ? ? stp w0, w1, [x1, #0x4]
? ? (12)條件域(跟在指令后并沒有空格):bl:帶返回的跳轉(zhuǎn)指令
????????EQ:equal,相等
????????NE:not equal, 不相等
????????GT:great than, 大于
????????GE:great or equal, 大于等于
? ? ? ? LT:less than, 小于
????????LE:less or equal, 小宇等于
????????beq mycode(找CPSR中Z位 1就跳, 不是1 就不跳,也就是之前結(jié)果為0就跳)?
? ? (13)內(nèi)存操作