[英]SWI setting R0 to 0
為什么在SWI
之后以下ARM代碼將R0
設置為0
?
.equ SWI_CheckButton, 0x203
.global _start
.text
_start:
mov R0, #1
swi SWI_CheckButton
我正在嘗試糾正采用以下形式的程序
FunctionA:
swi SWI_CheckButton
cmp R0, #1
beq label1
cmp R0, #2
beq lablel2
...
cmp R0, #9
beq label9
label1:
...
label9:
@do work
bal FunctionA
這在label9
變得一團糟,因為我希望它記住上次按下的鍵,但是swi SWI_CheckButton
R0
重置為0
(我想如果沒有按下任何鍵)。
問題是swi 0x203
R0
重置為0
所以我在哪里可以找到執行相同操作但不重置R0
的swi
?
我的猜測是SWI有一個返回值(也許零表示假 ?)
您需要將所需的值存儲在另一個寄存器中,並在調用后將其恢復。 如果沒有備用寄存器,則必須將其保存到堆棧中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.