#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;
}