簡體   English   中英

SWI將R0設置為0

[英]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所以我在哪里可以找到執行相同操作但不重置R0swi

我的猜測是SWI有一個返回值(也許零表示 ?)

您需要將所需的值存儲在另一個寄存器中,並在調用后將其恢復。 如果沒有備用寄存器,則必須將其保存到堆棧中。

我最終找到了該SWI 的示例 搜索SWI_CheckBlue 發生的是被按下的鍵的代碼由R0中的SWI例程返回。 如果R0在返回時為零,則意味着在調用SWI時未按下任何鍵。

您可能需要循環直到結果變為非零。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM