Регистрация
Войти
Стать экспертом Правила
Информатика

Oбрaзовaть стpокy, пoвтоpив фpaгмeнт исxоднoй cтpоки c задaннoй пoзиции дaннoй длины требyемоe чиcлo paз.

Программа на с++,функция должна быть написана с ассемблерной вставкой
Помогите, пожалуйста

ОТВЕТЫ
Думаю, что-то типа того.

#include lt;iostreamgt;
#include lt;stdio.hgt;

using namespace std;

int main()
{
    const int n = 100;
    char *C = new char[n];
    int p // позиция
    int l // длина
    int k // повторения

    cout lt;lt; "String C: ";
    cin gt;gt; C;
    cout lt;lt; "Pos: ";
    cin gt;gt; p; p--;
    cout lt;lt; "Length: ";
    cin gt;gt; l;
    cout lt;lt; "N: ";
    cin gt;gt; k;
    char *V = new char[l*k+1];

    if ((p gt;= 0) amp;amp; (l gt; 0) amp;amp; (k gt; 0) amp;amp; ((strlen(C) - p) gt;= l) amp;amp; (p lt;= strlen(C))) //проверка ввода
    {
        __asm
        {
            mov ebx, k;           // количество повторений
            mov edi, V         // адрес приёмника
            m1 : cmp   ebx, 0  // сравнение
                 je   exit1    // если EBX = 0, то переход на exit1
                 mov   ecx, l  // длина строки
                 mov   esi, C  // адрес источника
                 add   esi, p  // с заданной позиции
             m2 :
                mov al, [esi]    //из ESI
                mov [edi], al    // запись в EDI
                inc edi            // EDI+1
                inc esi            // ESI+1
                loop  m2        // цикл EСХ раз
                dec ebx         // EBX-1
                jmp m1             // переход на m1
            exit1 : mov[edi], 0
        }

        cout lt;lt; "\nV: ";
        cout lt;lt; V lt;lt; endl;
    }

    else cout lt;lt;  "\nError " lt;lt; endl;

    system("pause");
}
295
Контакты
Реклама на сайте
Спрошу
О проекте
Новым пользователям
Новым экспертам