MOV指令格式
- MOV r/m8 , r8
- MOV r/m16 , r16
- MOV r/m32 , r32
- MOV r8 , r/m8
- MOV r16 , r/m16
- MOV r32 , r/m32
- MOV r8 , imm8
- MOV r16 , imm16
- MOV r32 , imm32
注意:
1、以上的 r 表示通用寄存器,如:eax,ecx等等
2、mx表示x位的內存
3、immx表示x位的立即數
4、r8表示8位通用寄存器
5、m8表示8位的內存
6、imm8表示8位立即數
更多細節:請上網查找intel的白皮書!!!
舉例:
1、
格式:MOV r32 , r/m32
實例:MOV DWORD PTR DS:[0xEFFD48],0x11223344
2、
格式:MOV r/m16 , r16
實例:MOV AX,0x1122
ADD指令格式
- ADD r/m8 , imm8
- ADD r/m16 , imm16
- ADD r/m32 , imm32
- ADD r/m16 , imm8
- ADD r/m32 , imm8
- ADD r/m8 , r8
- ADD r/m16 , r16
- ADD r/m32 , r32
- ADD r8 , r/m8
- ADD r16 , r/m16
- ADD r32 , r/m32
結果: 將第一操作數與第二操作數相加後的結果放在第一操作數中
舉例:
1、
格式:ADD r/m16 , imm8
實例:ADD AX,0x11
2、
格式:ADD r/m16 , r16
實例:ADD AX,0x1122
SUB指令格式
- SUB r/m8 , imm8
- SUB r/m16 , imm16
- SUB r/m32 , imm32
- SUB r/m16 , imm8
- SUB r/m32 , imm8
- SUB r/m8 , r8
- SUB r/m16 , r16
- SUB r/m32 , r32
- SUB r8 , r/m8
- SUB r16 , r/m16
- SUB r32 , r/m32
結果: 將第一操作數與第二操作數相減後的結果放在第一操作數中
舉例:
1、
格式:SUB r/m16 , imm8
實例:SUB AX,0x55
2、
格式:SUB r/m16 , r16
實例:SUB CX,0x3344
AND指令格式
- AND r/m8 , imm8
- AND r/m16 , imm16
- AND r/m32 , imm32
- AND r/m16 , imm8
- AND r/m32 , imm8
- AND r/m8 , r8
- AND r/m16 , r16
- AND r/m32 , r32
- AND r8 , r/m8
- AND r16 , r/m16
- AND r32 , r/m32
結果: 將第一操作數與第二操作數相位與後的結果放在第一操作數中
舉例:
1、
格式:AND r/m16 , imm8
實例:AND BX,0x15
2、
格式:AND r/m16 , r16
實例:AND DX,0x6644
OR指令格式
- OR r/m8 , imm8
- OR r/m16 , imm16
- OR r/m32 , imm32
- OR r/m16 , imm8
- OR r/m32 , imm8
- OR r/m8 , r8
- OR r/m16 , r16
- OR r/m32 , r32
- OR r8 , r/m8
- OR r16 , r/m16
- OR r32 , r/m32
結果: 將第一操作數與第二操作數相位或後的結果放在第一操作數中
舉例:
1、
格式:OR r/m16 , imm8
實例:OR AX,0x35
2、
格式:OR r/m16 , r16
實例:OR CX,0x8844
XOR指令格式
- OR r/m8 , imm8
- OR r/m16 , imm16
- OR r/m32 , imm32
- OR r/m16 , imm8
- OR r/m32 , imm8
- OR r/m8 , r8
- OR r/m16 , r16
- OR r/m32 , r32
- OR r8 , r/m8
- OR r16 , r/m16
- OR r32 , r/m32
結果: 將第一操作數與第二操作數相位異或後的結果放在第一操作數中
舉例:
1、
格式:XOR r/m16 , imm8
實例:XOR AX,0x35
2、
格式:XOR r/m16 , r16
實例:XOR CX,0x8844
NOT指令格式
- NOT r/m8
- NOT r/m16
- NOT r/m32
結果: 將操作數取反
舉例:
1、
格式:NOT r/m8
實例:NOT AL
2、
格式:NOT r/m32
實例:NOT EAX
MOVS指令格式
-
movs byte ptr es : [edi] , byte ptr ds : [esi] 簡稱MOVSB
-
movs word ptr es : [edi] , word ptr ds : [esi] 簡稱MOVSW
-
movs dword ptr es : [edi] , dword ptr ds : [esi] 簡稱MOVSD
注:
1、這裏就用到了edi、esi兩個通用寄存器,這是他們非常常用的地方!
2、結果就是把esi地址的值進行拷貝到edi地址的值,拷貝長度由byte、word、dword決定!
3、指令用過一次,則edi、esi會產生遞增或者遞減的效果
注:
1、MOVSB
MOVS BYTE PTR ES:[EDI],BYTE PTR DS:[ESI]
用完之後,edi和esi會自動+1或者-1
2、MOVSW
MOVS WORD PTR ES:[EDI],WORD PTR DS:[ESI]
用完之後,edi和esi會自動+2或者-2
3、MOVSD
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
用完之後,edi和esi會自動+4或者-4
注: 爲什麼所edi和esi可能加可能減呢?這是由EFI標誌位寄存器的DF位決定的,DF=0則是加,DF=1則是減
STOS指令格式
-
stos byte ptr es : [edi] 簡稱STOSB
-
stos word ptr es : [edi] 簡稱STOSW
-
stos dword ptr es : [edi] 簡稱STOSD
注: 這裏就用到了edi這個寄存器
**結果:**將AL/AX/EAX的值存儲到地址爲EDI的內存單元,並且edi產生遞增或者遞減,常用於循環對內存進行初始化操作
REP指令格式
目的: 按計數寄存器ECX中指定的次數重複執行字符串指令
例:
1、
mov ecx , 5
rep movsd
2、
mov ecx , 5
rep stosd
今天就到此爲止,學到吐!!!ou~~~~~
老鐵們覺得還不錯的,記得別忘了點個贊呦!!!我是航行的土豆