回覆列表
  • 1 # 和不同

    先加點限制:

    變數為區域性變數,即函式內部的"auto"變數

    地址2001不正常,對於普通32位系統,地址應32位對齊,此處改為2004

    假設CPU為32位ARM

    下面是稍加限制後的程式碼:

    void test(){ int a; a=5; ......}變數a的儲存

    少數變數儲存在暫存器中;過多的變數儲存在堆疊頂部。

    在彙編指令中用堆疊指標+偏移量即可訪問。

    下面假設a儲存在暫存器R1。

    常量5的儲存

    常量5很小,不需儲存到資料段中。

    a=5對應如下:

    LDR R1, #5

    一條指令即可裝入。

    我們假設常量不是5,而是0xdeadbeef這樣的大數,那就應儲存在資料段中,即:

    data+2004 (data + 0x7d4)

    地址偏移量2004如何獲得

    偏移量2004將被編譯到程式碼中,由於此偏移量較大,需使用兩條指令將偏移量為2004的地址裝入暫存器R2,如下:

    ADD R2, Rdata, #2000LDR R1, [R2,#4]

    如果偏移量較小(204),則可以這樣:

    LDR R1, [Rx,#204]

  • 中秋節和大豐收的關聯?
  • 無名指關節疼痛,不能伸直?