Вот мое задание: В заданной строке с нулевым завершителем вставить заданную подстроку, начиная с заданной позиции. Прошу вас помочь мне. Я понимаю что это скорее всего элементарщина, но мне нужна помощь.
P.S Желательно алгоритм и код!
Другие языки программирования и технологии
Assembler,MASM! Лаб. Работа. #Помощь#Срочно
MASM, 32-разрядное консольное приложение для Windows.
.386
.model flat, stdcall
option casemap :none
include windows.inc
include kernel32.inc
includelib kernel32.lib
.data
String db "Заданная строка", 0
Sub_Str db "подстрока ", 0
Pos dd 10; Заданная позиция
.data?
Len_Str dd ?
Len_SbStr dd ?
OutStr dd ?
.code
N184019161:
invoke lstrlenA, addr String
mov Len_Str, eax
invoke lstrlenA, addr Sub_Str
mov Len_SbStr, eax
add eax, Len_Str
inc eax
invoke VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE
mov OutStr, eax
mov edi, eax
lea esi, String
mov ecx, Pos
dec ecx
rep movsb
lea esi, Sub_Str
mov ecx, Len_SbStr
rep movsb
lea esi, String
add esi, Pos
dec esi
mov ecx, Len_Str
sub ecx, Pos
inc ecx
rep movsb
mov byte ptr [esi], 0
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov ebx, eax
invoke lstrlenA, OutStr
invoke WriteConsoleA, ebx, OutStr, eax, NULL, 0
invoke VirtualFree, OutStr, NULL, MEM_RELEASE
invoke ExitProcess, NULL
end N184019161
P.S. Нумерация символов в строке начинается с единицы.
Пример выполнения программы:

.386
.model flat, stdcall
option casemap :none
include windows.inc
include kernel32.inc
includelib kernel32.lib
.data
String db "Заданная строка", 0
Sub_Str db "подстрока ", 0
Pos dd 10; Заданная позиция
.data?
Len_Str dd ?
Len_SbStr dd ?
OutStr dd ?
.code
N184019161:
invoke lstrlenA, addr String
mov Len_Str, eax
invoke lstrlenA, addr Sub_Str
mov Len_SbStr, eax
add eax, Len_Str
inc eax
invoke VirtualAlloc, NULL, eax, MEM_COMMIT, PAGE_READWRITE
mov OutStr, eax
mov edi, eax
lea esi, String
mov ecx, Pos
dec ecx
rep movsb
lea esi, Sub_Str
mov ecx, Len_SbStr
rep movsb
lea esi, String
add esi, Pos
dec esi
mov ecx, Len_Str
sub ecx, Pos
inc ecx
rep movsb
mov byte ptr [esi], 0
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov ebx, eax
invoke lstrlenA, OutStr
invoke WriteConsoleA, ebx, OutStr, eax, NULL, 0
invoke VirtualFree, OutStr, NULL, MEM_RELEASE
invoke ExitProcess, NULL
end N184019161
P.S. Нумерация символов в строке начинается с единицы.
Пример выполнения программы:

Похожие вопросы
- Нужна помощь СРОЧНО!! ! (вопрос внутри)
- Вечная проблема с Corel Draw X3. Прошу помощи, срочно!
- Программирование, нужна помощь срочно, не за бесплатно
- Assembler лаба не могу разобраться
- Системное время в TAsm и MAsm
- Visual Studio или MASM
- Assembler или C для микроконтроллеров?
- А почему программы написанные на C/C#/C++ имеют больший вес чем на tasm/masm?
- Как на TASM Assembler вывести число 12345 с помощью цикла ?
- Assembler помогите создать файлы *.obj *.exe