Перейти к содержанию
    

Помогите разобрать кусок ассемблерного кода

Добрый день.

 

Есть кусок ассемеблерного кода для ARM:

 

...

00 LDRB R4, [R0,#6]

01 MOV R4, R4,LSL#8

02 SUB R3, R4, #0xFF00

03 SUBS R3, R3, #0xFF

04 BXNE LR

05 LDR R4, =0x4000001A

...

 

В регистре R4 я получаю некий указатель.

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

LDRB вычитывает только один байт, который после сдвига влево на 8 всегда будет 0xNN00 и при вычитании из него 0xFF00, а затем 0xFF никогда не останется нулевым.

 

Подскажите, верно ли я понимаю этот кусок?

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Спасибо, а то я думал, может я что-то не понимаю. Выходит, теряется смысл всего дальнейшего текста функции.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...