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

Может оптимизатор на этапе компиляции (почему-то) изменяет ширину переменной до 9 бит, при 12+500 получается как раз 0 в 9-битовой переменной.

 

Похоже, что Вы правы.

Причем это он делает при операторе а++; И о том, что a - 8-битная он уже вспоминает при сравнении:

??main_0:
        ADDS     R5,R5,#+1
//   44     if(a == 0) {
        UXTB     R0,R5
        CBNZ.N   R0,??main_1
        ......

Но если вместо а++; использовать a+=1; оптимизатор всегда помнит, что a 8-битная и генерирует правильный код:

??main_0:
        ADDS     R5,R5,#+1
        UXTB     R5,R5
//   44     if(a == 0) {
        MOVS     R0,R5
        IT       EQ 
        ......

 

 

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


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

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

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

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

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

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

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

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

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

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