?? memory.h
字號:
// 不知道為什么在這里定義memcpy,string.h文件里已經(jīng)有一個(gè)了。
/** 注意!!!memcpy(dest,src,n)假設(shè)段寄存器ds=es=通常數(shù)據(jù)段。在內(nèi)核中使用的* 所有函數(shù)都基于該假設(shè)(ds=es=內(nèi)核空間,fs=局部數(shù)據(jù)空間,gs=null),具有良好* 行為的應(yīng)用程序也是這樣(ds=es=用戶數(shù)據(jù)空間)。如果任何用戶程序隨意改動(dòng)了* es 寄存器而出錯(cuò),則并不是由于系統(tǒng)程序錯(cuò)誤造成的。*///// 內(nèi)存塊復(fù)制。從源地址src 處開始復(fù)制n 個(gè)字節(jié)到目的地址dest 處。// 參數(shù):dest - 復(fù)制的目的地址,src - 復(fù)制的源地址,n - 復(fù)制字節(jié)數(shù)。// %0 - edi(目的地址dest),%1 - esi(源地址src),%2 - ecx(字節(jié)數(shù)n),
/*extern _inline void* memcpy(void * dest, const void * src, int n)
{
_asm{ pushf
mov esi,src
mov edi,dest
mov ecx,n // 共復(fù)制ecx(n)字節(jié)。
cld
rep movsb // 從ds:[esi]復(fù)制到es:[edi],并且esi++,edi++。
popf
}
return dest;
}#define memcpy(dest,src,n) ({ \void * _res = dest; \__asm__ ( "cld;rep;movsb" \:: "D" ((long)(_res)), "S" ((long)(src)), "c" ((long) (n)) \: "di", "si", "cx"); \_res; \})*/
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -