Мы в Telegram
Добавить новость
Новости сегодня

Новости от TheMoneytizer

(Срочно)Исправить небольшой код на C++ с ассемблерной вставкой

Есть код написанный по заданию ниже который никак не могу скомпилировать.
Заказ в том, чтобы быстро исправить код, код компилировался в visual studio 2019 и выполнял задание. Код размещён на GitHub и ниже в описании задания.
Ссылка на код https://github.com/ProMix0/Laboratory/blob/master/...

Задание было:
Написать функцию 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. Массивы рассмотреть двух видов:
— вещественных чисел типа float;
— символов char (т.е. заполняется некоторой строкой).
При этом для каждого вида массивов рассмотреть два случая с разной длиной, т.е. функцию
Swap для каждого вида массивов запускать дважды. Всего получается 4 примера.
Вывести результаты на экран (два массива: до и после вызова функции Swap). X86

Код:
#include <stdio.h>

void Swap(void* mem1, void* mem2, int len) {
asm("mov rcx,rdx\n"
"shr rcx,3\n"
"and rdx,7\n"

"test rcx,rcx\n"
"jz skip_8\n"

"loop_8:"
"mov rax,[rsi]\n"
"mov rbx,[rdi]\n"

"mov [rdi],rax\n"
"mov [rsi],rbx\n"

"add rsi,8\n"
"add rdi,8\n"
"loop loop_8\n"

"skip_8:"
"mov rcx,rdx\n"
"test rcx,rcx\n"
"jz return\n"

"loop_1:"
"mov al,[rsi]\n"
"mov bl,[rdi]\n"

"mov [rdi],al\n"
"mov [rsi],bl\n"

"inc rsi\n"
"inc rdi\n"
"loop loop_1\n"
"return:");
}

void main() {
float a[] = {-1, 2.4, 3.0}, b[] = {4.25, -5.15, 6.666666};
for (int i = 0; i < 3; i++) printf("%f ", a[i]);
printf("\n");
for (int i = 0; i < 3; i++) printf("%f ", b[i]);
printf("\nSwap\n");
Swap(a, b, 3 * sizeof(float));
for (int i = 0; i < 3; i++) printf("%f ", a[i]);
printf("\n");
for (int i = 0; i < 3; i++) printf("%f ", b[i]);
printf("\n\n\n");

float c[] = {-1, 2.4, 3.0, 15.345, 09.90},
d[] = {123.456, 654.321, 4.25, -5.15, 6.666666};
for (int i = 0; i < 3; i++) printf("%f ", c[i]);
printf("\n");
for (int i = 0; i < 3; i++) printf("%f ", d[i]);
printf("\nSwap\n");
Swap(c, d, 5 * sizeof(float));
for (int i = 0; i < 3; i++) printf("%f ", c[i]);
printf("\n");
for (int i = 0; i < 3; i++) printf("%f ", d[i]);
printf("\n\n\n");

char e[] = "hello", f[] = "world";
printf("%s\n%s\nSwap\n", e, f);
Swap(e, f, 5);
printf("%s\n%s\n\n\n", e, f);

char g[] = "goodbye", h[] = "my hell";
printf("%s\n%s\nSwap\n", g, h);
Swap(g, h, 7);
printf("%s\n%s\n\n\n", g, h);
}

Читайте на 123ru.net


Новости 24/7 DirectAdvert - доход для вашего сайта



Частные объявления в Вашем городе, в Вашем регионе и в России



Smi24.net — ежеминутные новости с ежедневным архивом. Только у нас — все главные новости дня без политической цензуры. "123 Новости" — абсолютно все точки зрения, трезвая аналитика, цивилизованные споры и обсуждения без взаимных обвинений и оскорблений. Помните, что не у всех точка зрения совпадает с Вашей. Уважайте мнение других, даже если Вы отстаиваете свой взгляд и свою позицию. Smi24.net — облегчённая версия старейшего обозревателя новостей 123ru.net. Мы не навязываем Вам своё видение, мы даём Вам срез событий дня без цензуры и без купюр. Новости, какие они есть —онлайн с поминутным архивом по всем городам и регионам России, Украины, Белоруссии и Абхазии. Smi24.net — живые новости в живом эфире! Быстрый поиск от Smi24.net — это не только возможность первым узнать, но и преимущество сообщить срочные новости мгновенно на любом языке мира и быть услышанным тут же. В любую минуту Вы можете добавить свою новость - здесь.




Новости от наших партнёров в Вашем городе

Ria.city

Военно-спортивный фестиваль Росгвардии открылся в «Лужниках»

Стратегии разрешения конфликтов. Консенсус vs Сотрудничество.

Пловец Колесников заявил, что условия участия в Олимпиаде являются ненормальными

На сольном концерте 71-летней Понаровской в Москве зрители не сдержали слез

Музыкальные новости

Муфтий Гайнутдин пожелал Путину помощи Аллаха для побед

Театр и Цирк, Культура и Концерт, Россия и Дети: Учащиеся Гурульбинской школы восхитились мастерством жонглирования, игрой с хула-хупами, иллюзионистами цирка Бурятии

Военнослужащие Красноярского соединения стали призерами Чемпионата Сибирского округа Росгвардии по стрельбе из боевого ручного стрелкового оружия

Анна Asti и Дима Билан стали лучшими исполнителями по версии премии МУЗ-ТВ

Новости России

Стратегии разрешения конфликтов. Консенсус vs Сотрудничество.

Смелый шаг: почему Россия поддержит вступление Турции в БРИКС

Мостовой: «Не удивлюсь, если «Зенит» перехватит Горшкова у «Спартака»

Russpass предлагает более 80 маршрутов для прогулок с детьми по Москве

Экология в России и мире

Волосы не выпадают, они стали гуще, а на лице разгладились морщины. Затрачивать можно 5 минут на массаж затылка, лба и головы

Неблагодарный батька или о чем говорил президент Белоруссии с делегацией Азербайджана?

Первый Международный фестиваль «Мир классического романса»

Лучшие образы на лето, от которых захватит дух

Спорт в России и мире

Россиянка Людмила Самсонова выиграла турнир WTA в Хертогенбосе

Курникова показала трогательные фото Энрике Иглесиаса

«ITF решила пойти по пути WTA и ATP, которые давно допускают россиян» — Янчук

Медведев и Сафиуллин сыграют в паре на турнире в Галле

Moscow.media

Бывшие сотрудники ФСИН выходят по УДО, их обвиняли в организации пыток

Завершается устройство земляного полотна на дороге с мостом через Обь в районе Сургута

Женщина провалилась в яму в центре Саратова. Начата проверка

Франт Куршского залива.







Топ новостей на этот час

Rss.plus





СМИ24.net — правдивые новости, непрерывно 24/7 на русском языке с ежеминутным обновлением *