(三)LEA,REP,MOV,MOVS,STOS與內存的表現形式

LEA:取地址,也能夠叫計算表達式內存

LEA有兩個操做數,左邊必須是寄存器,右邊必須寫成 寬度 PTR ds:[ 要計算的表達式] 循環

 

例如,咱們要取棧頂後面4位的地址,寬度爲4字節,並存到EAX裏數據

LEA EAX , DWORD PTR DS: [ESP + 4] 計算內容word

能夠當作右邊是計算 而後存入LEA,因此取地址叫法也不標準di

MOV:複製co

複製指定的數據到另外一塊地址 一邊必須是寄存器,不能內存到內存

例如:

複製esp的地址到eax

mov eax,esp

複製ESP的指向的數據到EAX

mov eax ,dword ptr ds: [esp]

 

MOVS :複製ESI指向的內存到EDI指向的內存,並ESI EDI加所複製的寬度(方向取決於DF標誌寄存器)簡寫形式(MOVSB,MOVSW,MOVSD)

mov esi,0x18FFA0     設置要複製內存的起始地址
mov edi,0x18FF78    //設置要複製 到哪裏的內存地址
std       //將DF標誌寄存器設置爲1,那麼下面複製就會像低內存連續複製,也就是複製完畢ESI EDI會減寬度
movs dword ptr es:[edi],dword ptr ds:[esi]  //複製4字節數據到edi指向的內存  想要連續複製多少次 能夠根據REP指定

 

REP: 循環

REP 後面跟要循環的語句 通常用於連續複製內存(MOVS)和填充某塊內存(STOS)

循環次數取決於ECX(計數器寄存器)

  例如

MOV ECX,4           //設置計數器複製4次,這裏是16進制

REP  movs dword ptr es:[edi],dword ptr ds:[esi]   //根據計數器循環複製4次,複製完畢向低位仍是高位內存 取決於DF標誌寄存器

 

STOS :將EAX 的數據複製到EDI指定的內存 簡寫形式(STOSB,STOSD,STODW)

例如EAX存的是0x11223344

將EAX複製到ESP指定的內存區別

STOS DWORD PTR DS: [ESP],EAX

循環複製也能夠用REP

相關文章
相關標籤/搜索