Программа hello.asm — это программа выводящая строку "Hello, world"
. В ней подробно прокомментирована каждая строчка. Программа add.asm — это программа, которая выполняет сложение двух длинных чисел.
Вам необходимо разобраться в этих примерах и написать на их основе программы выполняющие вычитание и умножение беззнаковых длинных чисел.
Обратите внимание, что приведенные примеры заточены на конкретную архитектуру процессора (x86-64), конкретный ассемблер (NASM) и операционную систему (Linux).
Проверяем, что всё компилируется:
$ cmake .
$ make
В текущем каталоге должны появится файлы hello
и add
. Проверяем, что всё работает:
$ ./hello
Hello, world!
$ ./add
10000000000000000000000000000000000000
100000000000000000000000000000000000000000000000000000000000000
100000000000000000000000010000000000000000000000000000000000000
В языке C++ реализована функция memcpy
. Наивная реализация этой функции кажется довольно очевидной. Однако легко понять, что мы можем копировать более одно байта за раз. Вам предлагается написать memcpy
по 1, 8 и 16 байт. При этом у 16-байтного варианта должно быть два варианта -- выравненный и невыравненный.
Дана строка. Необходимо сосчитать, сколько в ней слов. Для простоты будем считать что "слова" разделены пробелами между собой. Предлагается для начала написать наивную реализацию, а затем подумать над тем, как использовать __m128i
и операции над ним, такие как _mm_cmpeq_epi8
в C++ либо pcmpeqb
в ассемблере. И после этого написать реализацию, использующую SSE
регистры с ассемблерными вставками, либо же без них.