Смещение символов в строке
Знаю что алгоритм простой, но я в асме полный ноль)
Программа должна быть в виде ассемблерной вставки в visual studio.
Код:
int _tmain(int argc, _TCHAR* argv[])
{
char *str = new char[32];
cout << "Введите строку: \n";
cin >> str;
MoveASM(str);
return 0;
}
void MoveASM(char* str)
{
__asm
{
//Код на ассемблере
}
{
char *str = new char[32];
cout << "Введите строку: \n";
cin >> str;
MoveASM(str);
return 0;
}
void MoveASM(char* str)
{
__asm
{
//Код на ассемблере
}
Код:
void MoveASM(char* str, size_t cnt)
{
size_t len = strnlen_s(str, 32) - 1;
__asm
{
push eax
push ecx
push ebx
mov ecx, cnt
lbl1:
push ecx
xor eax, eax
mov ebx, str
mov al, byte ptr [ebx]
push eax
mov ecx, len
mov esi, str
inc esi
mov edi, str
rep movsb
pop eax
mov ebx, str
add ebx, len
mov byte ptr [ebx], al
pop ecx
dec ecx
jecxz ext
jmp lbl1
ext:
pop ebx
pop ecx
pop eax
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char *str = new char[32];
std::cout << "Введите строку:";
std::cin >> str;
MoveASM(str, 5);
std::cout << str;
std::cin.get();
return 0;
}
{
size_t len = strnlen_s(str, 32) - 1;
__asm
{
push eax
push ecx
push ebx
mov ecx, cnt
lbl1:
push ecx
xor eax, eax
mov ebx, str
mov al, byte ptr [ebx]
push eax
mov ecx, len
mov esi, str
inc esi
mov edi, str
rep movsb
pop eax
mov ebx, str
add ebx, len
mov byte ptr [ebx], al
pop ecx
dec ecx
jecxz ext
jmp lbl1
ext:
pop ebx
pop ecx
pop eax
}
}
int _tmain(int argc, _TCHAR* argv[])
{
char *str = new char[32];
std::cout << "Введите строку:";
std::cin >> str;
MoveASM(str, 5);
std::cout << str;
std::cin.get();
return 0;
}