匯編(二)

image.png

寄存器

內(nèi)部部件之間由總線連接

image.png

  • 對程序員來說,CPU中最主要部件是寄存器,可以通過改變寄存器的內(nèi)容來實現(xiàn)對CPU的控制
  • 不同的CPU,寄存器的個數(shù)、結(jié)構(gòu)是不相同的

通用寄存器

  • ARM64擁有有31個64位的通用寄存器 x0 到 x30,這些寄存器通常用來存放一般性的數(shù)據(jù),稱為通用寄存器(有時也有特定用途)
    • 那么w0 到 w28 這些是32位的. 因為64位CPU可以兼容32位.所以可以只使用64位寄存器的低32位.
    • 比如 w0 就是 x0的低32位!
image.png
  • 通常,CPU會先將內(nèi)存中的數(shù)據(jù)存儲到通用寄存器中,然后再對通用寄存器中的數(shù)據(jù)進行運算
  • 假設內(nèi)存中有塊紅色內(nèi)存空間的值是3,現(xiàn)在想把它的值加1,并將結(jié)果存儲到藍色內(nèi)存空間


    image.png
  • CPU首先會將紅色內(nèi)存空間的值放到X0寄存器中:mov X0,紅色內(nèi)存空間
  • 然后讓X0寄存器與1相加:add X0,1
  • 最后將值賦值給內(nèi)存空間:mov 藍色內(nèi)存空間,X0

pc寄存器(program counter)

  • 為指令指針寄存器,它指示了CPU當前要讀取指令的地址
  • 在內(nèi)存或者磁盤上,指令和數(shù)據(jù)沒有任何區(qū)別,都是二進制信息
  • CPU在工作的時候把有的信息看做指令,有的信息看做數(shù)據(jù),為同樣的信息賦予了不同的意義
    • 比如 1110 0000 0000 0011 0000 1000 1010 1010
    • 可以當做數(shù)據(jù) 0xE003008AA
    • 也可以當做指令 mov x0, x8
  • CPU根據(jù)什么將內(nèi)存中的信息看做指令?
    • CPU將pc指向的內(nèi)存單元的內(nèi)容看做指令
    • 如果內(nèi)存中的某段內(nèi)容曾被CPU執(zhí)行過,那么它所在的內(nèi)存單元必然被pc指向過

bl指令

  • CPU從何處執(zhí)行指令是由pc中的內(nèi)容決定的,我們可以通過改變pc的內(nèi)容來控制CPU執(zhí)行目標指令

  • ARM64提供了一個mov指令(傳送指令),可以用來修改大部分寄存器的值,比如

    • mov x0,#10、mov x1,#20
  • 但是,mov指令不能用于設置pc的值,ARM64沒有提供這樣的功能

  • ARM64提供了另外的指令來修改PC的值,這些指令統(tǒng)稱為轉(zhuǎn)移指令,最簡單的是bl指令

bl指令 -- 練習

現(xiàn)在有兩段代碼!假設程序先執(zhí)行A,請寫出指令執(zhí)行順序.最終寄存器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

講解視頻

ARM匯編入門(一) — 進制本質(zhì)
ARM匯編入門(二) — 寄存器&pc&bl指令
ARM匯編入門(三) — 寄存器&cpu補充
ARM匯編入門(四) — 棧SP&FP寄存器
ARM匯編入門(五) — bl&ret函數(shù)的調(diào)用與返回
ARM匯編入門(六) — 函數(shù)的參數(shù)和返回值
ARM匯編入門(七) — 函數(shù)的局部變量與嵌套調(diào)用
ARM匯編入門(八) — 狀態(tài)寄存器
ARM匯編入門(九) — 內(nèi)存分區(qū)全局變量和局部變量
ARM匯編入門(十) — 循環(huán)選擇判斷
待續(xù)…

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內(nèi)容

  • 8086匯編 本筆記是筆者觀看小甲魚老師(魚C論壇)《零基礎(chǔ)入門學習匯編語言》系列視頻的筆記,在此感謝他和像他一樣...
    Gibbs基閱讀 37,334評論 8 114
  • 一. 總線 每一個CPU芯片都有許多管腳,這些管腳和總線相連,CPU通過總線跟外部器件進行交互 總線: 一根根導線...
    林大鵬閱讀 576評論 0 0
  • 總線 每一個CPU芯片都有許多管腳,這些管腳和總線相連,CPU通過總線跟外部器件進行交互 總線:一根根導線的集合 ...
    小小魚類閱讀 503評論 0 0
  • 總線 每一個CPU芯片都有許多管腳,這些管腳和總線相連,CPU通過總線跟外部器件進行交互 總線:一根根導線的集合 ...
    Stone_熊小叔閱讀 287評論 0 0
  • 總線 每一個CPU芯片都有許多管腳,這些管腳和總線相連,CPU通過總線跟外部器件進行交互 總線:一根根導線的集合 ...
    為自己丶拼個未來閱讀 388評論 2 2