SirenaProgrammer
@SirenaProgrammer
Увлекаюсь программированием и легкой атлетикой

Как правильно решить задачу на работу с двумя массивами в asm?

Добрый день!
Мне нужно написать программу, в которой у меня есть массив из 16(32) байт. Нужно из c++ переместить этот массив в ассемблерную вставку, а там уже перенести из этого массива в другой массив все элементы, которые равны сумме соседних. Можно в ассемблере максимум использовать двойные слова. То есть регистры e*x нельзя брать. Кто может подсказать, где найти материал по этой теме, либо же предложить пример кода для решения поставленной задачи? Я пыталась найти что-то в интернете на эту тему, но, к сожалению, ничего не нашла :(
  • Вопрос задан
  • 121 просмотр
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
http://dilbert.com/strip/1998-08-24
Нужно из c++ переместить этот массив в ассемблерную вставку, а там уже перенести из этого массива в другой массив все элементы, которые равны сумме соседних.
То есть регистры e*x нельзя брать. Кто может подсказать, где найти материал по этой теме, либо же предложить пример кода для решения поставленной задачи?

Можно написать этот код так, что он не будет использовать никакие конкретные регистры явно. Конкретные регистры будут подставлены компилятором. Например (gcc):
#include <stdint.h>

void f(void)
{
    uint32_t a[16] = {1, 2, 3, 1, 5, 4, -1, }, b[16] = {0};
    void *a1, *b1;
    uint32_t tmp, cnt = 14;

    asm (
        "lea %[a], %[a1]\n\t"
        "lea %[b], %[b1]\n"
        "1:\n\t"
        "mov (%[a1]), %[tmp]\n\t"
        "add 8(%[a1]), %[tmp]\n\t"
        "cmp 4(%[a1]), %[tmp]\n\t"
        "jne 2f\n\t"
        "mov %[tmp], (%[b1])\n\t"
        "add $4, %[b1]\n"
        "2:\n\t"
        "add $4, %[a1]\n\t"
        "dec %[cnt]\n\t"
        "jnz 1b\n\t"
        : [cnt] "=&r" (cnt), [tmp] "=&r" (tmp),
          [a1] "=&r" (a1), [b1] "=&r" (b1),
          [b] "=m" (b)
        : [a] "m" (a));
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Chenii Санкт-Петербург
от 1 500 до 3 500 $
VMS Software Санкт-Петербург
от 110 000 ₽
25 февр. 2020, в 13:06
2000 руб./за проект
25 февр. 2020, в 12:59
50000 руб./за проект
25 февр. 2020, в 12:51
2000 руб./за проект