Собираю задачи для обновления курса на год - Assembler

Узнай цену своей работы

Формулировка задачи:

Прошу помощи в подготовке списка небольших задач для обновления курса на этот год. Планирую по 5 вариантов в четырёх тематиках:
  1. Последовательный набор команд (целые числа).
  2. Циклы и условия (массивы целых чисел и строки).
  3. Математический сопроцессор.
  4. SSE.
Мне не так давно понравилась задача «найти числа от N до М имеющие ровно три разных делителя» С одной стороны она достаточна простая, с другой — можно небольшими оптимизациями существенно изменить её трудоёмкость. Как следствие, хочется собрать задачи:
  • которые либо так же могут решаться несколькими способами,
  • либо показывающими преимущества использования Ассемблера.
К последним можно отнести:
  • длинную арифметику с использованием ADC и расширенного результата MUL;
  • умножение вектора 4-х float-в на матрицу (4х4) за семь команд (используя HADDPS).
Технические требования:
  1. 32-битный режим
  2. использование стандартной библиотеки Си для взаимодействия с ОС, например, printf

Решение задачи: «Собираю задачи для обновления курса на год»

textual
Листинг программы
    size_t n = 3;
    size_t i;
    int32_t xs[] = { -2000000000, -2000000000, 1000000000 };
    int32_t sum;
    int32_t average;
    
    sum = 0;
    for(i=0; i<n; ++i) {
      sum += xs[i];
    }
    average = sum / n;
    
    printf("%u\n", average); // Результат: 431655765

Объяснение кода листинга программы

  1. Объявляются переменные: — n (size_t) — 3 — i (size_t) — счётчик цикла — xs (int32_t[]) — массив из 3 элементов, содержащий -2000000000, -2000000000, 1000000000 — sum (int32_t) — сумма элементов массива — average (int32_t) — средняя величина (сумма элементов массива, делённая на количество элементов)
  2. Вычисляется сумма элементов массива: sum = 0 for(i=0; i<n; ++i) { sum += xs[i] }
  3. Вычисляется средняя величина: average = sum / n
  4. Выводится значение переменной average (результат: 431655765)

Оцени полезность:

5   голосов , оценка 4 из 5
Похожие ответы