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