Процедура не возвращает значения (MASM)

я написал эту процедуру, которая считает количество слов, предложений и абзацев в тексте, но она почему-то не получает нужные данные из кода на ассемблере. Вот сам код:

.686p
.MODEL FLAT, C
.STACK

.data
    words dd 0
    PrioritySpace dd 0
    PriorityDots dd 0
    Paragraph dd 0
    dots dd 0

.code                                         ; точка входа в программу
counterOfWrdSntncPrgrph proc str1:dword, res:dword, len:dword
        
        xor edx, edx                     ;обнуление регистра edx, служащий для подсчета количества добавляемых символов в результирующую строку
        mov ecx, [len]                   ;инициализация счетчика цикла длиной введенной строки
        mov ebx, [str1]                  ;запись в ebx адреса первого элемента строки


cycle:
        mov al, [ebx]                     ;запись в регистр al текущий символ строки

        cmp al, 012q                       ;сравнение текущего символа с символом перевода строки
        je line_break                       ;в случае совпадения, переход на метку для пробельного символа - переноса строки


        cmp al, 040q                             ;сравнение текущего символа с символом пробела
        je space                               ;в случае совпадения, переход на метку пробельного символа - пробела

        cmp al,056q                          ;сравнение текущего символа с символом точки
        je dot                               ;в случае совпадения, переход на метку предложений

        cmp al, 041q                         ;сравнение текущего символа с символом восклицательного знака
        je dot                               ;в случае совпадения, переход на метку предложений

        cmp al, 077q                         ;сравнение текущего символа с символом вопросительного знака
        je dot                               ;в случае совпадения, переход на метку предложений

        jmp symbol                           ;если текущий символ не является специальным

;метка символа, неявляющимся специальным
symbol:
        mov PriorityDots, 0                  ;обнуление "булевой" переменной окончания строки
        jmp resume

;метка переноса строки
line_break:

        inc [Paragraph]                              ;инкрементирование количества абзацев
        jmp resume                                   ;переход на продолжение цикла

;метка пробела
space:
        cmp PrioritySpace, ' '                   ;проверка на текущий символ
        jne space_inc                                ;если не пробел  инкримируем кол-во слов
        jmp resume

;инкримирование слов
space_inc:

        inc [words]                       ;инкрементирование количества слов
        jmp resume                         ;переход на продолжение цикла

dot:
        cmp PriorityDots, 0
        je dot_inc
        jmp resume

dot_inc:
        mov PriorityDots, 1
        inc [dots]
        jmp resume

;добавление количества абзацев, слов и предложений в переменные результата


;продолжение цикла
resume:
        mov PrioritySpace, ebx                ;запись текущего символа для проверки на многопробелье
        inc ebx                               ;переход на адрес следующего элемента основной строки
        dec ecx                              ;декрементация счетчика цикла
        cmp ecx, 0                         ;проверка счетчика на 0 - конец строки
        jne cycle                            ;если не конец строки, новый проход по циклу
 
     
        mov eax, [dots]
        mov [res], eax
        mov eax, [words]
        mov [res+4], eax
        mov eax, [Paragraph]
        mov [res+8], eax
    
       
        
        ret
counterOfWrdSntncPrgrph endp

end 

и С++

#include <iostream>
#include <cstring>
#include <string>
#include <cstdlib>
#include <conio.h>
#include <stdio.h>

using namespace std;

extern "C"
{
    //
    void counterOfWrdSntncPrgrph(char* str1, int[3], int len);
}

int main()
{
    //инициализация переменных
    string str;
    char str1[250];
    int answ[3] = {};
    int len;
    
    
    cout << "Enter the string: ";
    //ввод текста
    std::getline(cin, str, ';');
    

    //определение длины строки
    len = strlen(str1);

    //вызов процедуры
    
    cout << "Number of sentences, words and paragraphs:";
    //вывод отформатированной строки
    
    counterOfWrdSntncPrgrph(str1, answ, len);
    
    for (int i = 0; i < 3; i++) {
        
        cout << answ[i]<<' ';
    }
    

    
    
    

    _getch();
}

Ответы (0 шт):