В этом репозитории есть пример программы на ассемблере:
add.asm— это программа, которая выполняет сложение двух длинных чисел.
Вам необходимо разобраться в этом примере и написать на его основе программы, выполняющие вычитание и умножение беззнаковых длинных чисел.
Для того чтобы запустить примеры и написать своё решение, вам понадобится любой 64-битный дистрибутив Linux.
- Модифицируйте файлы
sub.asmиmul.asm, чтобы они выполняли вычитание и умножение. - Если захотите внести изменения в
add.asm, сделайте это отдельным коммитом сразу во всех трёх файлах, перед тем как приступать к реализации вычитания и умножения. - При необходимости собрать код без каких-либо файлов, закомментируйте в
CMakeLists.txtстрочки, связанные с ними (но не коммитьте эти изменения).
$ sudo apt install binutils g++ cmake nasm
$ ./build.sh$ ./build/add
10000000000000000000000000000000000000
100000000000000000000000000000000000000000000000000000000000000
100000000000000000000000010000000000000000000000000000000000000- На вход в
add,subиmulпоступают беззнаковые числа максимальной длины 128 qwords. - Результат
addиsub— беззнаковое число максимальной длины 128 qwords (переполнение в соответствии с модульной арифметикой). Результатmul— беззнаковое число максимальной длины 256 qwords. - Программу можно реализовать по-разному, но если в вашем решении можно будет соптимизировать потребление памяти на стеке (или в
.data), то вы будете вынуждены делать правки. - Вы не можете считывать числа, тратя на это больше памяти, чем требуется.
- Оставляйте комментарии в коде, особенно если делаете что-то нетривиальное — это сильно упрощает проверку.
Если смотреть за выводом CI в реальном времени, GitHub может обрезать длинные числа. Так что если ожидаемые ответы на тесты mul выглядят подозрительно короткими, дождитесь окончания CI и обновите страницу. Или скачайте логи.