汇编 STD和CLD指令
一、用纯汇编封装函数strcmpW 1、用repnz scasw计算字串长度 2、用repz cmpsw比较字串内容 3、把比较的结果存放在EAX里边返回 __declspec(naked) int strcmpw(WCHAR* s1,WCHAR *s2)// scasw strcmpW { __asm { push ebp mov ebp,esp // esp+4+4 s1 //esp+4+8 s2 xor ax,ax//在edi所在地址查找字节的 mov edi,[ebp+4+4]// mov ecx,-1 //0xFFFF FFFF cld //设置DF=0 预防其他程序调用后 未设置0 repnz scasw; not ecx // '\0' 计算s1字串长度,指定repz循环次数 mov edi,[ebp+4+4] mov esi,[ebp+4+8] repz cmpsw // 每次比较2字节 (1个字) xor eax,eax xor edx,edx mov ax,[edi-2] mov dx,[esi-2] sub eax,edx //相等eax=0,大于返回结果>0 小于<0 pop ebp retn } 二、方向标志位(DF相关指令) STD/CLD STD DF=1 CLD DF=0