一、用纯汇编封装函数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