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

POMIPO POMIPO    1   14.08.2019 13:10    4

Ответы
gltomilovglebnopi gltomilovglebnopi  04.10.2020 18:49
Думаю, что-то типа того.

#include <iostream>
#include <stdio.h>

using namespace std;

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

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

    if ((p >= 0) && (l > 0) && (k > 0) && ((strlen(C) - p) >= l) && (p <= 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 << "\nV: ";
        cout << V << endl;
    }

    else cout <<  "\nError " << endl;

    system("pause");
}
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика