Загрузка данных


#include <iostream>
using namespace std;

// Функция подсчёта пробелов в строке (завершается нулём)
int countSpaces(const char* str) {
    int result = 0; // переменная для результата

    __asm {
        mov esi, str       ; ESI = указатель на строку
        xor eax, eax       ; EAX = 0 (счётчик пробелов)
        xor ebx, ebx       ; EBX = 0 (временный регистр, здесь не используется, но обнулён)

    next_char:
        lodsb              ; AL = *ESI, ESI++ (загружаем байт и увеличиваем указатель)
        test al, al        ; проверяем, не равен ли AL нулю (конец строки)
        jz done            ; если равен 0 – выходим

        cmp al, ' '        ; сравниваем AL с пробелом (код 32)
        jne not_space      ; если не пробел – пропускаем инкремент

        inc eax            ; увеличиваем счётчик пробелов (EAX)

    not_space:
        jmp next_char      ; переходим к следующему символу

    done:
        mov result, eax    ; сохраняем результат в переменную result
    }

    return result;
}

// Пример использования
int main() {
    const char* text = "Hello world! This is a test string with spaces.";
    int spaces = countSpaces(text);
    cout << "Строка: \"" << text << "\"" << endl;
    cout << "Количество пробелов: " << spaces << endl;
    return 0;
}