<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > ARM-Thumb 過(guò)程調用標準

ARM-Thumb 過(guò)程調用標準

作者: 時(shí)間:2016-11-11 來(lái)源:網(wǎng)絡(luò ) 收藏
寄存器

ATPCS 指定用于特殊用途的寄存器
- 使用寄存器 r0-r3 將參數值傳送到函數,并將結果值傳出??梢杂?a1-a4 來(lái)引用 r0-r3,以使此用法透明。請參閱第 3-9 頁(yè)的參數傳遞。在子程序調用之間,可以將 r0-r3 用于任何用途。被調用函數在返回之前不必恢復 r0-r3。
如果調用函數需要再次使用 r0-r3 的內容,則它必須保留這些內容。
- 使用寄存器 r4-r11 存放函數的局部變量??梢杂?v1-v8 來(lái)引用這些寄存器,以使此用法透明。在 Thumb 狀態(tài)下,在大多數指令中只有寄存器 r4-r7 可以用于局部變量。
如果被調用函數使用了這些寄存器,它在返回之前必須恢復這些寄存器的值。
- 寄存器 r12 是內部調用暫時(shí)寄存器 ip。它在過(guò)程鏈接膠合代碼(例如,交互操作膠合代碼)中用于此角色。在過(guò)程調用之間,可以將它用于任何用途。被調用函數在返回之前不必恢復 r12。
- 寄存器 r13 是棧指針 sp。它不能用于任何其它用途。sp 中存放的值在退出被調用函數時(shí)必須與進(jìn)入時(shí)的值相同。
- 寄存器 r14 是鏈接寄存器 lr。如果您保存了返回地址,則可以在調用之間將 r14 用于其它用途。
- 寄存器 r15 是程序計數器 PC。它不能用于任何其它用途。

本文引用地址:http://dyxdggzs.com/article/201611/316971.htm

生成匯編程序語(yǔ)言時(shí),編譯程序使用特定名稱(chēng)和基本寄存器名。
另外,s0-s31、d0-d15 和 f0-f31 是浮點(diǎn)協(xié)處理器中寄存器的預定義名稱(chēng)。

ATPCS 中的寄存器角色和名稱(chēng)
寄存器同義詞特定名稱(chēng)過(guò)程調用標準中的角色
r15-PC程序計數器
r14-lr鏈接寄存器
r13-sp棧指針
r12-ip內部過(guò)程調用暫時(shí)寄存器
r11v8-ARM 狀態(tài)變量寄存器 8
r10v7sl

ARM 狀態(tài)變量寄存器 7

棧檢查變體中的棧限制指針

r9v6sb

ARM 狀態(tài)變量寄存器 6

RWPI 變體中的靜態(tài)基址

r8v5-ARM 狀態(tài)變量寄存器 5
r7v4-變量寄存器 4
r6v3-變量寄存器 3
r5v2-變量寄存器 2
r4v1-變量寄存器 1
r3a4-自變量/結果/ 暫時(shí)寄存器 4
r2a3-自變量/結果/ 暫時(shí)寄存器 3
r1a2-自變量/結果/ 暫時(shí)寄存器 2
r0a1-自變量/結果/ 暫時(shí)寄存器 1

參數傳遞
有可變個(gè)數自變量的函數是 variadic。有固定個(gè)數自變量的函數是 nonvariadic。
向 variadic 和 nonvariadic 函數傳遞參數有不同的規則。
Nonvariadic 函數
參數值以下列方式傳遞到 nonvariadic 函數:
1. 前面的整型自變量按順序分配給 r0-r3
2. 其余參數按順序分配給棧

長(cháng)整數分配
超過(guò) 32 位的整型參數(例如,long long 型)有 8 字節對齊。傳遞 long long 型
參數時(shí),將它分配給寄存器 r2 和 r3,或者分配給棧。
浮點(diǎn)數分配
如果系統有浮點(diǎn)硬件,則 FP 參數如下列方式分配給 FP 寄存器:
1. 按次序檢查每個(gè) FP 參數。
2. 對于每個(gè)參數,檢查可用的 FP 寄存器組。
3. 如果有一個(gè)可用,則將編號最低、尺寸適合于參數的相鄰 FP 寄存器組分配給參數。

Variadic 函數
參數值在整型寄存器 a1-a4 中、必要時(shí)在棧中傳遞到 variadic 函數(a1-a4 是 r0-r3的同義詞)。
使用的字順序如同參數值存儲在連續內存字中,然后傳輸到:
1. a1-a4,首先是 a1。
2. 棧,首先是最低地址。(這表示它們以相反的順序推入棧中。)

結果返回
函數可以:
- 在 a1 中返回單字整型值。
- 在 a1-a2、a1-a3 或 a1-a4 中返回雙字或四字整型值。
- 在 f0、d0 或 s0 中返回浮點(diǎn)值。
- 在 f0-fN 或 d0-dN 中返回復合浮點(diǎn)值(如 complex)。N 的最大值取決于所選的浮點(diǎn)結構(請參閱第 3-17 頁(yè)的浮點(diǎn)選項)。
- 較長(cháng)的值必須在內存中間接返回。



關(guān)鍵詞: ARM-Thumb過(guò)程調用標

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>