Вставить подстроку в строку - Ошибка в коде - Assembler

Узнай цену своей работы

Формулировка задачи:

Доброй ночи, господа. "В заданной строке с нулевым завершителем вставить заданную подстроку, начиная с заданной позиции" - тема моей программы. Код написала, но мне кажется, что он делает не совсем то, что нужно... В OllyDbg выдает такое, но я не понимаю, что там( Прошу помочь разобраться в чем соль. Буду очень признательна!
       .486
    .model flat, stdcall
    option casemap :none   
 
    include \masm32\include\windows.inc
    include \masm32\include\masm32.inc
    include \masm32\include\kernel32.inc
    include \masm32\macros\macros.asm
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\kernel32.lib
 
.data
    text1 db 'AAAAAA',0
    text2 db 'BBB', 0
    text3 db 9 dup (0)
    position = 3
.code
 
start:
 
cld
lea si, [text1] ;цепочка источник
lea di, [text3] ;цепочка приёмник
mov cx, position    ;количество элементов для обработки
rep     movsb
 
cld
lea si, [text2] ;цепочка источник
lea di, [text3] ;цепочка приёмник
mov cx, position    ;количество элементов для обработки
rep     movsb
 
cld
lea si, [text1 + position]  ;цепочка источник
lea di, [text3] ;цепочка приёмник
mov cx, 3   ;количество элементов для обработки
rep     movsb
 
mov ah, 09   
lea dx, [text3]  
int 21h ;выводим строку-приёмник на экран
mov ax, 4c00h    
int 21h
 
end start

Решение задачи: «Вставить подстроку в строку - Ошибка в коде»

textual
Листинг программы
    .486
    .model flat, stdcall
    option casemap :none   
 
    include \masm32\include\windows.inc
    include \masm32\include\masm32.inc
    include \masm32\include\kernel32.inc
    include \masm32\macros\macros.asm
    includelib \masm32\lib\masm32.lib
    includelib \masm32\lib\kernel32.lib
 
.data
    hConsoleOutput  HANDLE  ?
    text1 db 'AAAAAA',0
    text2 db 'BBB', 0
    text3 db 9 dup (0)
    position = 3
.code
 
start:
 
cld
lea esi, [text1]    ;цепочка источник
lea edi, [text3]    ;цепочка приёмник
mov ecx, position   ;количество элементов для обработки
rep     movsb
 
cld
lea esi, [text2]    ;цепочка источник
lea edi, [text3]    ;цепочка приёмник
mov ecx, position   ;количество элементов для обработки
rep     movsb
 
cld
lea esi, [text1 + position] ;цепочка источник
lea edi, [text3]    ;цепочка приёмник
mov ecx, 3  ;количество элементов для обработки
rep     movsb
 
invoke GetStdHandle, STD_OUTPUT_HANDLE
mov hConsoleOutput,EAX
invoke WriteConsole, hConsoleOutput, offset text3, 16d, NULL, NULL
 
invoke ExitProcess, 0
 
end start

Оцени полезность:

10   голосов , оценка 4 из 5
Похожие ответы