мод (%) в сборке AVR - __divmodhi4 - PullRequest
0 голосов
/ 16 марта 2019

Я пытаюсь сделать% 10 в сборке AVR.

Я создал простой файл c

int main()
{
  int k=19;
  int j;
  j = k%10;
  return 0;
}

, который я затем собрал в сборку, дав

    ldi r24,lo8(19)
    ldi r25,0
    std Y+2,r25
    std Y+1,r24
    ldd r24,Y+1
    ldd r25,Y+2
    ldi r18,lo8(10)
    ldi r19,0
    mov r22,r18
    mov r23,r19
    rcall __divmodhi4
    std Y+4,r25
    std Y+3,r24
    ldi r24,0
    ldi r25,0

Как работает __divmodhi4 и где хранятся результаты?

1 Ответ

3 голосов
/ 16 марта 2019

Поскольку AVR не имеет аппаратного делителя, компилятор AVR-GCC должен использовать сложные функции для выполнения таких операций.

__ divmodhi4 - одна из этих функций. Он делит 16-разрядное целое число со знаком, сохраненное в r25: r24, на 16-разрядное целое число со знаком в r23: r22.

Возвращает 16-битное отношение в r23: r22 и остаток в r25: r24

Вы должны увидеть __divmodhi4 в той же разборке, где вы видите свой собственный код.

также вы можете найти источники библиотеки GCC , например, здесь

...