Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.05.2018, 14:13   #1
Pro_
Новичок
Джуниор
 
Регистрация: 14.05.2018
Сообщений: 1
По умолчанию Перевод кода программы на C++ в assembler

Здравствуйте!
Есть фрагмент кода на С++. На вход получает массив mas, индекс k элемента, с которого начинается преобразование массива , длина массива n. Возвращает массив, в котором c k-ого элемента реализуется пирамида(двоичное дерево, где каждый потомок меньше своего предка, т.е. для каждого k: mas[k]>mas[2*k+1] и mas[k]>mas[2*k+2])
Нужно переделать в код на assembler.
Код:
void throught(double *mas, int k, int n)
{
    int index;
    double buf;
    while (k < floor(n / 2))
    {
        index = 2 * k + 1;
        if ((index < n) & (mas[index] < mas[index + 1]))
            index++;
        if (mas[k] > mas[index])
        {
            k++;
            break;
        }
        else
        {
            buf = mas[k];
            mas[k] = mas[index];
            mas[index] = buf;
            k = index;
        }
        
    }
}
Pro_ вне форума Ответить с цитированием
Старый 14.05.2018, 14:26   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

1. Исправьте ошибку
2. Засуньте код в компилятор и получите асм
Код:
throught(double*, int, int):
  movl %edx, %eax
  pxor %xmm2, %xmm2
  pxor %xmm0, %xmm0
  shrl $31, %eax
  cvtsi2sd %esi, %xmm0
  addl %edx, %eax
  sarl %eax
  cvtsi2sd %eax, %xmm2
  comisd %xmm0, %xmm2
  jbe .L1
  movslq %esi, %r9
  movsd (%rdi,%r9,8), %xmm1
  jmp .L6
.L10:
  movsd %xmm0, (%rax)
  pxor %xmm0, %xmm0
  cvtsi2sd %esi, %xmm0
  movsd %xmm1, (%rcx)
  comisd %xmm0, %xmm2
  jbe .L1
  movslq %esi, %r9
.L6:
  leal (%rsi,%rsi), %r8d
  leal 1(%r8), %esi
  movslq %esi, %rax
  salq $3, %rax
  leaq (%rdi,%rax), %rcx
  movsd (%rcx), %xmm0
  cmpl %esi, %edx
  jle .L3
  movsd 8(%rdi,%rax), %xmm3
  comisd %xmm0, %xmm3
  jbe .L3
  leal 2(%r8), %esi
  movslq %esi, %rax
  leaq (%rdi,%rax,8), %rcx
  movsd (%rcx), %xmm0
.L3:
  comisd %xmm0, %xmm1
  leaq (%rdi,%r9,8), %rax
  jbe .L10
.L1:
  ret
p51x вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод чисел Assembler zlobrik Помощь студентам 0 11.05.2014 20:27
Assembler. Перевод числа. Corpinccom Помощь студентам 0 07.05.2011 14:55
Assembler. перевод. Corpinccom Помощь студентам 0 19.04.2011 21:00
Assembler. Перевод числа. Corpinccom Помощь студентам 3 18.04.2011 18:42