Для себя Мне нужно выполнить дз по assembly к 23:59 Вы можете сообщить мне свою цену 1.Напишите подпрограмму ‘partition’, которая в регистре EBX (RBX) принимает адрес начала массива arr элементов типа int16_t, в регистре ESI их количество size (size > 1) и в регистре EDI знаковое значение pivot. Гарантируется, что элемент, равный pivot, в массиве сущ ствует. Перегруппируйте элементы массива таким образом, что в начале массива находятся элементы, для которых выполняется условие arr[i] <= pivot, а в конце массива — arr[i] >= pivo . То есть в итоговом массиве должен существовать такой индекс mid (0 <= mid < size) что arr[i] <= pivot для любого i < mid и arr[i] >= pivot для любого i >= mid. В регистре EDX верните mid. Соблюдайте стандартные соглашения о сохранении/восстановлении регистров. Например, если задан массив { 10 9 8 7 6 5 4 3 2 1 } и значение pivot == 5, возможным результатом будет массив { 1 2 3 4 6 5 7 8 9 10 } и значение mid == 4. Функцию вызова вашего кода из си можно взять https://gist.github.com/ObjatieGroba/d7102f7fe80871f787e9b0321667fa52 2.Напишите программу, реализующую операции над персистентным стеком (знающим все свои промежуточные состояния). На стандартном входе программе подаётся не более 1000 команд в виде 32-битных знаковых чисел: 0 i x - push(i, x); 1 i - pop(i); Нулевое состояние - состояние пустого стека Элемент (состояние) стека должен храниться в памяти в виде двух машинных слов: хранимое число и адрес (или индекс) элемента-предка. Элементы стека должны храниться в статически заданном массиве достаточного размера. Команда push создает новое состояние, равное добавлению числа x в конец состояния i. Команда pop печатает вершину стека состояния i и создает новое состояние - состояние после удаления. Команда pop пустого списка не создает новое состояние и печатает -1. Признаком завершения списка команд является флаг CF, выставленный функцией read* из simpleio. Гарантируется, что состояния, на которые ссылаются команды, существуют. 3.Напишите функцию supersum складывающую беззнаковые “длинные“ little-endian числа C = A + B. В регистре eax передается указатель на число A, в ebx - указатель на B, в ecx - указатель на С. В esi лежит размер числа A, в edi размер числа B в байтах. Программа возвращает 1 + индекс последнего ненулевого байта числа C в регистре eax (иными словами размер числа C). Размер числа 0 - 0. Гарантируется, что размер буфера C > max(размер A, размер B). Не забывайте сохранять значения регистров, которые нельзя портить. Инструкции pushf и popf выглядят надежными и кладут/забирают аж четыре байта на стек. Входные числа могут содержать старшие нулевые байты. Вы можете протестировать функцию со https://gist.github.com/ObjatieGroba/cf373ad19998e8f04701997355d5f396