Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 14.05.2018, 15:13   #1
Pro_
Новичок
 
Регистрация: 14.05.2018
Сообщений: 1
Репутация: 10
По умолчанию Перевод кода программы на 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, 15:26   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 11,537
Репутация: 1916

icq: 216409213
По умолчанию

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод чисел 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


04:23.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru