2009-07-29 3 views

ответ

4

Если вы решили продолжить работу с ассемблером ARM, вам понадобится копия ARM ARM, которая является Справочным руководством по архитектуре ARM. Есть много версий, и у каждого есть свои «функции». Я рекомендую собирать столько, сколько вы можете, но это другая история. Существует несколько способов получить электронную копию бесплатно. В любом случае:

И вам нужен набор бит S, который для ARM означает использование ANDS вместо AND. Для режима большого пальца вы всегда используете ANDS, но газ, например, отказывается принимать ANDS в режиме большого пальца (но всегда разбирает его как ands).

If S==1 and Rd == R15 then 
    CPSR=SPSR 
else if S==1 
    N Flag = Rd[31] 
    Z Flag = if Rd == 0 then 1 else 0 
    C Flag = shifter_carry_out 
    V flag = unaffected 

ПНП является такой же, как и когда речь идет о флагах

+0

ничего себе, что выглядит некрасиво, я не сделал формат правильно. В любом случае google ищет «руку» без кавычек, и первое попадание - это обход руки руки прямо с arm.com. –

+0

Я исправил форматирование для вас. Выберите текст и нажмите кнопку поиска в двоичном формате. – 2009-08-02 16:15:57

2

Напомним, что вы можете произвольно сдвинуть результат после операции. Флаг переноса установлен на основе выполнения с баррель-переключателем. Флаг переполнения никогда не изменяется.

4

Я не верю, что нормальный AND/EOR установил флаги переноса и переполнения. Варианты ANDS и EORS (AND/EOR с набором) могут устанавливать перенос, но только если правая сторона является сдвинутым операндом. Ни один из них не влияет на флаг переполнения.

Например,

ANDS R0,R1,R2, LSR #1 

будет установить перенос в зависимости от b0 R2. Если бит равен 1 (т. Е. R2 был нечетным), перенос будет установлен.

См. here для подробной информации (глава 3, набор инструкций).

3

Как отмечают другие плакаты, флаг C обновляется на основе сдвига, который необязательно применяется к одному из исходных регистров до операции.

Флаг V (переполнение) не подвержен этим инструкциям.

Флаг Z устанавливается, если результат равен нулю, а флаг N установлен, если результат является отрицательным, если рассматривать его как целое число с двумя дополнениями (то есть бит высокого порядка является одним).