SWI устанавливает R0 на 0 - PullRequest
0 голосов
/ 20 марта 2012

Почему следующий код ARM устанавливает R0 в 0 после SWI?

    .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, так где я могу найти swi, который делает то же самое, но не сбрасывает R0?

Ответы [ 2 ]

1 голос
/ 20 марта 2012

My думаю, - это то, что SWI имеет возвращаемое значение (может быть, ноль указывает false ?)

Вам необходимо сохранить нужное значение в другом регистре и восстановить его после вызова. Если у вас нет запасного регистра, вам придется сохранить его в стеке.

0 голосов
/ 20 марта 2012

Я в итоге нашел пример для этого SWI.Сделайте поиск для SWI_CheckBlue.Что происходит, так это то, что код нажатой клавиши возвращается процедурой SWI в R0.Если R0 равен нулю при возврате, это означает, что во время вызова SWI не было нажато ни одной клавиши.

Возможно, вам нужно выполнить цикл, пока он не выйдет ненулевым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...