В этом репозитории есть пример двух программ на ассемблере:
- Программа
hello.asm— это программа выводящая строку "Hello, world". В ней подробно прокомментирована каждая строчка. - Программа
add.asm— это программа, которая выполняет сложение двух длинных чисел.
Вам необходимо разобраться в этих примерах и написать на их основе программы, выполняющие вычитание и умножение беззнаковых длинных чисел.
Обратите внимание, что приведенные примеры заточены на конкретную архитектуру процессора (x86_64), конкретный ассемблер (nasm) и операционную систему (Linux).
Для того, чтобы запустить примеры и написать свое решение вам понадобится любой 64-битный дистрибутив Linux. Чтобы проверить битность вашего дистрибутива, можно исполнить команду:
$ uname -mЕсли команда выводит x86_64, то система 64-битная, если i386 или i686 — 32-битная.
Все действия в инструкциях совершаются из папки с данным файлом
- Модифицируйте файлы
sub.asmиmul.asm, чтобы они выполняли вычитание и умножение. - Если хотите собрать код без какого-либо файла, то закомментируйте в
CMakeLists.txtстрочки, связанные с ними
$ sudo apt install binutils g++ cmake nasm
$ ./build.sh$ ./hello
Hello, world!
$ ./add
10000000000000000000000000000000000000
100000000000000000000000000000000000000000000000000000000000000
100000000000000000000000010000000000000000000000000000000000000mulиsubдолжны работать с беззнаковыми числами максимальной длины 128 qword (input). При этом результатmul(output) в данном случае может быть длины 256 qword и это должно корректно обрабатываться.- Уменьшаемое в
subвсегда не меньше вычитаемого. - Программу можно реализовать по-разному, но если в вашем решении можно будет соптимизировать потребление памяти на стеке (или в
.data), то вы будете вынуждены делать правки. - Вы не можете считывать числа, тратя на это больше памяти, чем требуется.