指令1 2015.1.19
一、ADC指令:带进位加法
1、格式:ADC R/M,R/M/IMM (ADC 寄存器/内存,寄存器/内存/立即数) 两边不能同时为内存,宽度要一样
2、
①ADC AL,CL
CL加到AL中1+2应为3,但是是ADC再进位加法变成了4,C位也从1变成了0(因为AL+CL后高位没有溢出,所以变成了0)
②ADC BYTE PTR DS:[12FFC4],2
12FFC4的内存加2应该变成3D但是进位变成3E
③ADC BYTE PTR DS:[12FFC4],AL
二、SBB指令:带借位减法
1、格式:SBB R/M,R/M/IMM 两边不能同时为内存 宽度要一样
2、SBB AL,CL
SBB BYTE PTR DS:[12FFC4],2
SBB BYTE PTR DS:[12FFC4],AL
三、XCHG指令
①寄存器之间交换:XCHG AL,CL AL与CL交换
②XCHG DWORD PTR DS:[12FFC4],EAX 内存与寄存器交换
四、MOVS指令
MOV ESI,12FFDC
MOV EDI,12FFD0
MOVS DWORD PTR ES:[EDI],DWORD PTR DS:[ESI]
执行前两个指令后寄存器的值变成了对应内存的值,最后一条指令执行后寄存器的值在前两条指令的基础上再各加了4,如果把最后一条指令的DWORD换成WORD就是各加2
WORD,减2
五、STOS指令
第一二个指令执行后是EAX是12345678,EDI变成了12FFC4,第三条指令执行后是DWORD减4
六、REP指令
REP MOVSD是,下面第二条指令的缩写
第二条指令的作用是重复把ESI往EDI移动数据,因为是16进制,所以10是16次