?Последовательность выполнения функции?

Тема в разделе "Arduino & Shields", создана пользователем Mestniy, 29 мар 2016.

  1. AlexU

    AlexU Гуру

    Подтверждаю. Одна и та же операция -- операция вычитания.
    Для строк кода:
    Код (C++):
    i++;
    i = i + 1;
    i +=1;
    компилятором avr-gcc генерируется одна и та же операция:
    Код (C++):
    subi    r22, 0xFF
    . В регистр r22 загружено значение переменной 'i' и из этого значения вычитается '0xFF'. На выходе получается инкремент значения регистра r22 на единицу.

    UPD:
    Код (C++):
    lds   r22, 0x0102   // загрузка значения переменной 'i' в регистр r22
    subi   r22, 0xFF   // r22 = r22 - 0xFF
    sts   0x0102, r22  // сохранение значения регистра r22 в переменной 'i'
    UPD2:
    регистры могут быть разные, в примере компилятор выбрал регистр r22, но мог выбрать и другой регистр. Например, r20, r25 и т.п.
     
    Последнее редактирование: 30 мар 2016
  2. Megakoteyka

    Megakoteyka Оракул Модератор

    Вообще ассемблеров существует вагон и маленькая тележка. Для каждой архитектуры свой ассемблер. Ассемблер x86 и ассемблер AVR - это разные ассемблеры. А еще не всякая инструкция исполняется за 1 такт, иногда 2 инструкции работают быстрее, чем одна, опять же в зависимости от архитектуры.
    А i++ и i=i+1 в любом случае оптимизатор переварит в то, что будет быстрее исполняться на целевой архитектуре. Равно как и заменит деление/умножение на степень двойки сдвигом.
     
  3. CutToSleep

    CutToSleep Нерд

    Хмм. Значит, авторы компилятора молодцы, за что им честь и похвала:) Вот и читай после этого учебники программирования десятилетней давности. А казалось бы, что могло в таких мелочах измениться?)
     
  4. Megakoteyka

    Megakoteyka Оракул Модератор

    А вы не обращайте внимания на такие мелочи. Смысл биться за каждый такт есть только в том случае, когда нет возможности поставить более шустрый процессор, а такое случается нечасто. Железо стоит дешево, а время разработчика дорого, из этого и нужно исходить.
     
    ИгорьК нравится это.