SashaBe 0 15 марта, 2016 Опубликовано 15 марта, 2016 · Жалоба Добрый день. Есть кусок ассемеблерного кода для 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 никогда не останется нулевым. Подскажите, верно ли я понимаю этот кусок? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
aaarrr 63 15 марта, 2016 Опубликовано 15 марта, 2016 · Жалоба В R3 в любом случае окажется ненулевое отрицательное число, так что выходить по BXNE будет всегда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SashaBe 0 15 марта, 2016 Опубликовано 15 марта, 2016 · Жалоба В R3 в любом случае окажется ненулевое отрицательное число, так что выходить по BXNE будет всегда. Спасибо, а то я думал, может я что-то не понимаю. Выходит, теряется смысл всего дальнейшего текста функции. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться