1.ADC指令:带进位加法
我们将要执行adc al,5 ,此时我们把C0变为C1,接着
本该为08,结果却是09,这是由于在做adc加法运算时将C1借走了
二.SBB指令:带借位减法
这里也是改成了C1,接着执行 sbb al,2
这里也是本该运算为7,结果为6
三、XCHG指令:交换数据
格式:XCHG R/M,R/M/IMM 两边不能同时为内存 宽度要一样
接着执行XCHG AL,CL
两者确实交换了数据
四、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
例子:
接着执行MOVSD
这里将内存编号001DD60存储的数据拷贝到001DD5C中
这里ESI和EDI的存储的数据都+4
五、STOS指令:将Al/AX/EAX的值存储到[EDI]指定的内存单元
STOS BYTE ES:[EDI] STOSB
STOS WORD ES:[EDI] STOSW
STOS DWORD ES:[EDI] STOSD
例子:
这里刚执行完mov eax,12124545 ,接下来注意edi对应的内存编号存储的数据
这里EDI原来对应的内存编号存储的数据变为了12124545,然后EDI的内存编号+4变成了001DDF64(如果DF标志位值为1,EDI的对应的内存编号-4)
六、REP指令:按次数寄存器(ECX)中指定的次数重复执行字符串指令
例子:
执行完mov ecx,2后,我们接着执行rep stosd
从图中可以看出,这是连续执行了两次STOSD