Alihandro
Alihandro

Как посчитать длинну CИ-строки через __asm???

АА
Александра Азеева

Вот накидал простое не оптимизированное решение:
#include

#ifdef __GNUC__

//Длинна строки (32-бит синтаксис AT)
size_t __length(const char* s){
size_t n = 0;
asm("movl %0, %%esi"::"d"(s));
asm("movl %esi, %edi\n\t"
"__next:\n\t"
"mov (%esi), %al\n\t"
"or $0, %al\n\t"
"jz __end;\n\t"
"incl %esi\n\t"
"jmp __next;\n\t"
"__end:\n\t"
"subl %edi, %esi\n\t");
asm("movl %%esi, %0" :"=r"(n));
return n;
}

#else

//Длинна строки (32-бит синтаксис INTEL)
size_t __length(const char* s){
size_t n = 0;
__asm {
mov esi, s
__next:
mov al, byte ptr[esi]
or al, 0
jz __end;
inc esi
jmp __next;
__end:
mov edx, dword ptr s
sub esi, edx
mov dword ptr n, esi
};
return n;
}

#endif

int main(void){
char str[] = "Terminator Cyborg";
printf("length: %u\n", __length(str));
return 0;
}

Лучшее форматирование кода: http://pastebin.com/yMDCEM3e

Похожие вопросы
как без цикла посчитать количество тегов в строке php
Помогите написать программу в паскале. в строке посчитать количество букв
Помогите. Как найти самое длинное слово в строке на С?
как посчитать длину круга
Дана строка символов. Определить длину строки. Если длина строки <=20, то найти в строке порядковый номер символа *
Ввести строку, вывести самое длинное слово. с++. Ввести строку, вывести самое длинное слово. с++
с клавиатуры вводится строка посчитать кол-во слов в строке и в коне каждого слова вставить звездочку
Поиск наиболее длинного слова в строке! С++
Строку какой длины может вместить переменная с типом string?
ассемблер, длина строки (код в описании)