#include "pch.h"#include 
//从别人那里所得颇多,分享自己的所得,如果你有所收获,那便是再好不过了!水平有限,难免出错!//编译环境:vs2017char szStr1[] = "100001";char szStr2[] = "100001";//思路:把字符串逐个字节拿出来,分别比较bool myStrcmp(char* str1, char*str2){ __asm  { mov edi,str1               //拷贝str1的地址到edi mov esi,str2               //拷贝str2的地址到esi mov ecx,0h                //ecx累加器     loop1:  mov al, byte ptr[edi + ecx]     //取一个字节传入al(地址加偏移) mov bl, byte ptr[esi + ecx]     //取一个字节传入bl(地址加偏移) add ecx, 1               //ecx+1,取出下一字节 test al, al               //判断al是否为空,字符串的结尾0 jz fun1                 //为空则跳转 test bl, bl               //判断bl是否为空,字符串的结尾0 jz fun1                 //为空则跳转 cmp al,bl                //比较al、bl jnz fun3                 //不相等则跳转 jmp loop1                //回到循环头部 fun1://某个字符串遍历到结尾0的情况 cmp al, bl   //比较al、bl jz fun2     //相等则跳转 jmp fun3     //跳转到fun3    fun2: mov eax, 1h   //eax置1 jmp end      //结束   fun3: mov eax, 0h   //eax置0 end: }}int main(){ bool bRet=myStrcmp(szStr1, szStr2); printf("%d", bRet);}//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#include "pch.h"#include 
//编译环境:vs2017char szStr1[100] = "100001";char szStr2[] = "100001156666666666666666666666";//参数:目的字符串 目的字符串长度 源字符串void myStrcpy(char* str1,int nStrlen, char*str2){ //str1会被清空 __asm  { mov edi,str1                    //拷贝str1的地址到edi mov esi,str2                    //拷贝str2的地址到esi mov ecx, nStrlen                //ecx累加器 cld                             //方向标志位DF置0  esi->edi rep movsb                       //rep重复指令  movsb按字节拷贝 esi->edi }}int main(){ myStrcmp(szStr1,100, szStr2); printf("%s", szStr1);}//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++#include "pch.h"#include 
char szStr1[] = "100001";char szStr2[] = "100001156666666666666666666666";//思路:从szStrl1末尾开始拷贝, szStr1l + 字符串长度 - 1,减去一是去掉末尾0//参数:目的字符串 目的字符串长度 源字符串 源字符串长度 void myStrcat(char* str1, int nStrlen1, char*str2, int nStrlen2){ __asm { xor eax,eax                     //异或指令,eax清0 add eax, str1                   //加上strl起始地址 add eax, nStrlen1               //加上字符串长度 sub eax,1                       //去掉末尾0 mov edi, eax                    //拷贝str1结束的地址到edi mov esi, str2                   //拷贝str2的地址到esi mov ecx, nStrlen2               //ecx累加器 cld                             //方向标志位DF置0  esi->edi rep movsb                       //rep重复指令  movsb按字节拷贝 esi->edi }}int main(){ myStrcat(szStr1,7,szStr2,31); printf("%s", szStr1);}