91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++內聯匯編實現strcmp strcpy strcat

發布時間:2020-06-22 16:48:51 來源:網絡 閱讀:665 作者:適__ 欄目:編程語言
#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);
}


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

方山县| 连平县| 全南县| 双峰县| 湾仔区| 云林县| 桑植县| 泰来县| 个旧市| 高密市| 清新县| 丰镇市| 上栗县| 嘉黎县| 滨海县| 天水市| 枣强县| 临海市| 蒙阴县| 郁南县| 大渡口区| 阿勒泰市| 河间市| 泊头市| 岫岩| 榕江县| 中江县| 绿春县| 得荣县| 柯坪县| 萨迦县| 纳雍县| 崇州市| 梅河口市| 崇礼县| 丰都县| 绥芬河市| 西贡区| 呼玛县| 普兰县| 克拉玛依市|