#include "pch.h" #include <iostream> //從別人那裏所得頗多,分享自己的所得,如果你有所收穫,那便是再好不過了!水平有限,難免出錯! //編譯環境:vs2017 char 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 <iostream> //編譯環境:vs2017 char 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 <iostream> 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); }
C++內聯彙編實現strcmp strcpy strcat
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.