匯編實現: C庫常見函數,串操作指令作用
阿新 • • 發佈:2018-10-23
默認 rep ptr 多重 ++ 例如 需要 函數 toc
目錄
- 匯編實現: C庫常見函數
- 一丶匯編實現Strncpy拷貝函數
匯編實現: C庫常見函數
一丶匯編實現Strncpy拷貝函數
void __asmStrncpy(char *des,char *src,int len) { __asm { mov edi,[ebp + 8]; //獲取局部變量地址 des mov esi,[ebp + 0xc]; //獲取局部變量地址 src mov ecx,len; //使用movs指令,需要給ecx長度 cld //設置DF = 0; 內存方向, 此時edi++ esi ++獲取方式 rep movs byte ptr [edi],byte ptr[esi];//根據ecx的值,循環從esi裏面獲取字節輸幾局給edi ;rep movsb //直接省略了.默認操作 eis 跟 edi.以字節方式 ;rep movsw //以word兩個字節為單位拷貝 等價於 rep movs byte ptr[edi],byte ptr[esi] ;rep movsd //四個字節為單位. } }
總結:
movs指令的作用
主要使用了串操作指令movs指令 [esi] 拷貝->[edi] ecx計數 rep重復.
1.跟ecx搭配, ecx控制循環次數
2.跟cld搭配. cld設置DF位,這樣拷貝的時候內存就是++拷貝
3.movs的主要作用就是把 esi所指向的內存數據 拷貝到 edi所指向的內存中.
4.movs 有很多重載, 例如 movsb movsw movsd 分別就是按照字節拷貝, 按照一個字拷貝 按照4個字拷貝.
匯編實現: C庫常見函數,串操作指令作用