Skip to content

sashasashasasha151/Assembly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Assembly

Задание №1

Программа hello.asm — это программа выводящая строку "Hello, world". В ней подробно прокомментирована каждая строчка. Программа add.asm — это программа, которая выполняет сложение двух длинных чисел. Вам необходимо разобраться в этих примерах и написать на их основе программы выполняющие вычитание и умножение беззнаковых длинных чисел. Обратите внимание, что приведенные примеры заточены на конкретную архитектуру процессора (x86-64), конкретный ассемблер (NASM) и операционную систему (Linux).

Запуск примеров

Проверяем, что всё компилируется:

$ cmake .
$ make

В текущем каталоге должны появится файлы hello и add. Проверяем, что всё работает:

$ ./hello
Hello, world!
$ ./add
10000000000000000000000000000000000000
100000000000000000000000000000000000000000000000000000000000000
100000000000000000000000010000000000000000000000000000000000000

Задание №2

В языке C++ реализована функция memcpy. Наивная реализация этой функции кажется довольно очевидной. Однако легко понять, что мы можем копировать более одно байта за раз. Вам предлагается написать memcpy по 1, 8 и 16 байт. При этом у 16-байтного варианта должно быть два варианта -- выравненный и невыравненный.

Задание №3

Дана строка. Необходимо сосчитать, сколько в ней слов. Для простоты будем считать что "слова" разделены пробелами между собой. Предлагается для начала написать наивную реализацию, а затем подумать над тем, как использовать __m128i и операции над ним, такие как _mm_cmpeq_epi8 в C++ либо pcmpeqb в ассемблере. И после этого написать реализацию, использующую SSE регистры с ассемблерными вставками, либо же без них.

About

Homeworks from ITMO assembly course

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages