1. 程式人生 > >匯編實現: C庫常見函數,串操作指令作用

匯編實現: C庫常見函數,串操作指令作用

默認 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庫常見函數,串操作指令作用