|
||||
(LOad String Byte/Word/Double word operands)(LOad String Byte/Word/Double word operands) Загрузка строки байтов/слов/двойных слов
Назначение: загрузка элемента из последовательности (цепочки) в регистр-аккумулятор al/ax/eax.
Примеры программ int equal_str(char *string1, char *string2) { int r; int len1, len2; len1=strlen(string1); len2=strlen(string2); if(len1==len2) asm volatile ( " movl %[str1], %%esi\n" //str1 -> esi " movl %[str2], %%edi\n" //str2 -> edi " movl %[len], %%ecx\n" //len -> ecx " rep cmpsb\n" //повторяем сравнение строк с уменьшением значения ecx " jz yes\n" //результат в zf. Если в zf=0 (то есть все элементы оказались равны) " movl $0, %%eax\n" " jmp exit\n" " yes: \n" " movl $1, %%eax \n" " exit: \n" " movl %%eax, %[res]\n" : [res]" =a" (r) : [str1]" S" (string1), [str2]" D" (string2), [len]" c" (len1) ); else r=0; return r; } void copy_str( char* dst, char *src, int count) { asm (" cld\n" " rep movsb\n" : /*входные операнды отсутствуют*/ : " S" (src), " D" (dst), " c" (count)); cout< < dst< < endl; }
|
||||
|