Написать ассемблерную вставку в виде функции для кода на C++

500 руб. за проект
01 июня 2023, 07:27 • 2 отклика • 29 просмотров
Написать функцию Swap, которая меняет местами содержимое двух областей памяти
одинаковой длины.
void Swap(void *Mem1, void *Mem2, long Len)
Здесь Mem1 — указатель на первую область памяти, Mem2 — на вторую, Len — их длина в
байтах. Для параметра Len использован знаковый тип, поскольку работоспособность функции
должна гарантироваться при 0 ≤ Len < 2^31
.
В коде реализовать цикл обмена областей памяти блоками по 4 или 8 байт. Обмен по 8 байт может быть реализован через стек математического
сопроцессора с помощью команд fild (загрузка числа из памяти в стек) и fistp (выгрузка числа из
стека в память) со спецификатором размера qword ptr (четверное слово). Стек сопроцессора
при необходимости может быть использован и при обмене блоками по 4 байта. В этом случае в
командах fild и fistp используется спецификатор размера dword ptr. Поскольку значение Len в
общем случае может быть не кратно 4 или 8, оставшиеся после цикла обмена двойных или
четверных слов байты обменять любым удобным способом.
Рассмотреть примеры работы функции. В каждом примере берутся два массива одного
типа и одной длины, но с разным содержанием (допустимо использовать как статические, так и
динамические массивы). Для них вызывается функция Swap. Массивы рассмотреть двух видов:
1
— вещественных чисел типа float;
— символов char (т.е. заполняется некоторой строкой).
При этом для каждого вида массивов рассмотреть два случая с разной длиной, т.е. функцию
Swap для каждого вида массивов запускать дважды. Всего получается 4 примера.
Вывести результаты на экран (два массива: до и после вызова функции Swap). X86
Отзывы
Avatar r50 a6ce93fe35b158fd29ba0e8681c918c22117160e9586a56eee4ffbc20df9bda1
Фрилансер
как я могу отправить вам код ? и вывод
~ 1 год назад