汇编 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 // '' 计算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


 
原文地址:https://www.cnblogs.com/whzym111/p/6373929.html