匯編
CPU & 內(nèi)存
- 控制線
內(nèi)存是讀還是寫
- 地址線
從內(nèi)存地址中找出內(nèi)存的值
- 數(shù)據(jù)線
從內(nèi)存中取出數(shù)據(jù)交給CPU挺尾,傳輸數(shù)據(jù)的能力
寄存器
CPU直接交互的硬件返顺,CPU 不會(huì)直接和內(nèi)存交互而是從內(nèi)存中去除數(shù)據(jù)放到寄存器中禀苦,由寄存器和CPU 交互
arm64 有31個(gè)寄存器 每個(gè)寄存器有64位,x0-x31 也有w0-w31 不過w0是X0的低32位 如int 修飾的參數(shù) 放到寄存器里面就會(huì)是w0
PC寄存器
CPU 馬上要執(zhí)行的指令 CPU通過PC寄存器來(lái)尋找將要執(zhí)行指令遂鹊。bl指令
arm64 有個(gè)mov指令振乏,用來(lái)修改寄存器的值,但是mov指令不能修改pc寄存器 不能mov pc 0x113333333這種形式
修改pc寄存器 只能是bl 和8086 jump差不多
將下一條指令存到x30寄存器(lr寄存器 )ret指令:
表示函數(shù)的結(jié)束秉扑,如果函數(shù)有返回值的話慧邮,cpu會(huì)把計(jì)算的結(jié)果放到x0寄存器中调限,x0為函數(shù)的返回值。高速緩存
對(duì)內(nèi)存讀取的速度太慢了误澳,于是有了高速緩存棧
特殊訪問方式的存儲(chǔ)空間耻矮,有FIFO特性
sp寄存器,sp指向哪忆谓,哪就是棧裆装。總指向棧頂 棧是有高到低str ldr str是將 寄存器數(shù)據(jù)放到棧里面
ldr 是將內(nèi)存數(shù)據(jù)放入寄存器中
2個(gè)變種stp ldp
- cpsr 寄存器 標(biāo)記寄存器 32位
判斷結(jié)果 看cpsr 決定某條指令是否被執(zhí)行
32位的最后4為 NZCV
N 表示運(yùn)算結(jié)果是否為正 負(fù)為N=1 非負(fù) N=0
Z判斷結(jié)果是否為0 如果為0 Z=1 不為0 則Z=0
C 運(yùn)算時(shí) 進(jìn)位為1 否則為0
V 溢出 正數(shù)加正數(shù)
- 內(nèi)存分區(qū)
代碼區(qū)倡缠,放代碼的 可讀可寫 可執(zhí)行
棧區(qū)域 存放參數(shù) 局部變量 可讀可寫
堆區(qū)域 可讀可以
全局變量 可讀可寫
常量區(qū) 可讀