移位,串操作

1. 移位指令,移出的位保存在CF里

SHL reg/mem, 1/CL ;逻辑左移,右侧补0,移出的位保存在CF里。

SHR reg/mem, 1/CL ;逻辑右移,左侧补0,移出的位保存在CF里。

SAL reg/mem, 1/CL ;算数左移,等同于逻辑左移,机器码也相同

SAR reg/mem, 1/CL ;算数右移,左侧补符号位,移出的位保存在CF里。

 

8086只能移1位,更多则需要存放在CL中,80386开始没有此限制。

 移位,串操作

 

 移位,串操作

 

 移位,串操作

 

 

 

 

 

 

如果进行了1位的移动操作,导致符号位改变了,则OF=1,如果移动位数大于1,则OF不确定。

 移位,串操作

 

 

 

 

 

ROL reg/mem, 1/CL ;循环左移,移出的位放在右侧,同时也放在CF里。

ROR reg/mem, 1/CL ;循环右移,移出的位保存左侧,同时也放在CF里。

同样,如果进行了1位的移动操作,导致符号位改变了,则OF=1,如果移动位数大于1,则OF不确定。

 移位,串操作

 

 

 

 

 

 

RCL reg/mem, 1/CL ;带进位循环左移,移出的位放在CF里,原CF放到最右侧。

RCR reg/mem, 1/CL ;带进位循环右移,移出的位保存CF里,原CF放到最左侧。

同样,如果进行了1位的移动操作,导致符号位改变了,则OF=1,如果移动位数大于1,则OF不确定。

 移位,串操作

 

 

 

将DX.AX表示的数左移一位,可用以下代码:

SHL AX, 1 ;AX的最高位到了CF中

RCL DX, 1 ;DX最低位补上CF中的位,最高位移出,放到CF中

 

 

  1. 串操作指令

汇编中的串指的是数据块。

MOVSB ;ES:[DI] <-- DS:[SI], SI±1, DI±1, DF控制传送方向

MOVSW ;ES:[DI] <-- DS:[SI], SI±2, DI±2, DF控制传送方向

MOVSD ;ES:[EDI] <-- DS:[ESI], ESI±4, EDI±4, DF控制传送方向

类似于memcpy

 移位,串操作

 

 移位,串操作

 

 移位,串操作

 

 

 

 

 

 

 

 

STOSB ;ES:[DI] <-- AL, DI±1, DF控制传送方向

STOSW ;ES:[DI] <-- AH,  DI±2, DF控制传送方向

STWSD ;ES:[EDI] <-- EAX, EDI±4, DF控制传送方向

类似于memset

 移位,串操作

 

 

 移位,串操作

 

 

 

 

 

 

LODSB ;AL <-- DS:[SI], SI±1, DF控制传送方向

LODSW ;AX <-- DS:[SI], SI±2, DF控制传送方向

LODSD ;EAX <-- DS:[ESI], ESI±4, DF控制传送方向

 移位,串操作

 

 

 

 

 

 

 

CMPSB ;DS:[SI] - ES:[DI], 不保存结果,影响标志位, SI±1, DF控制传送方向

CMPSW ;DS:[SI] - ES:[DI], 不保存结果,影响标志位, SI±2, DF控制传送方向

CMPSD ;DS:[SI] - ES:[DI], 不保存结果,影响标志位, SI±4, DF控制传送方向

类似于memcmp

 

 

 

SCASB ;AL - ES:[DI], 不保存结果,影响标志位, SI±1, DF控制传送方向

SCASW ;AX - ES:[DI], 不保存结果,影响标志位, SI±2, DF控制传送方向

SCASD ;EAX - ES:[EDI], 不保存结果,影响标志位, SI±4, DF控制传送方向

类似于memchr

 移位,串操作

 

 

 

REP ;机器码和REPZ/REPE相同

MOVSB

CX != 0时,重复操作,每次都--CX

 

 

REPZ/REPE  ;机器码和REP相同,CX!=0且ZF=1时重复执行

REPNZ/REPNE ;cx!=0且ZF=0时重复执行

 

上一篇:[转]Json字符串和map和HashMap之间的转换


下一篇:计算圆周长,圆面积,圆柱的体积。