汇编笔记2

逻辑指令包括逻辑运算指令和移位指令。逻辑运算指令可对操作数执行逻辑运算,移位指令执行对操作数左移或右移若干位的功能。

 ⑴ 逻辑运算指令          ⑵ 移位指令

   AND     逻辑与          SAL     算术左移

   OR      逻辑或          SHR     逻辑右移

   OT      逻辑非          SAR     算术右移

   XOR     异或           ROL    循环左移

   TEST     测试           ROR    循环右移

                     RCL    带进位循环左移

                     RCR    带进位循环右移

 移位指令包括逻辑移位指令、算术移位指令、循环移位指令和带进位循环移位指令。指令中的目的操作数dst可以是除立即数外的任何寻址方式。移位次数(或位数)cnt=1时,1可直接写在指令中;cnt>1时,cnt必须放入CL寄存器。

 

 SHL dst,cnt ; 逻辑左移(shift logical left)

 
执行操作:


 SHR dst,cnt ; 逻辑右移(shift logical right)

 执行操作:


 SAL dst,cnt ; 算术左移(shift arithmetic left)

 执行操作:


 SAR dst,cnt ; 算术右移(shift arithmetic right)

 
执行操作:


  SHL和SAL指令向左移动的操作是相同的,在每次逐位移动后,最低位用0来补充,最高位移入CF。SHR与SHL移动的方向相反,每次向右移动后,最高位用0来补充,最低位移入CF。SAR在每次右移都用符号位的值补充最高位,最低位仍然是移入CF。


  由此可以看出,算术移位适于带符号数的移位处理。我们知道,一个数左移n位相当于乘以2n,右移n位相当于除以2n, 所以,当一个带符号数需要乘(或除)2n时,可使用算术移位指令SAL(或SAR)。当一个无符号数需要乘(或除)2n时,可使用逻辑移位指令SHL(或SHR)。使用移位指令将一个数扩大或缩小2n倍,比使用乘法或除法指令的速度快。


  移位指令的条件码设置:

  CF= 移入的数值

  OF=1 当cnt=1时,移动后最高位的值发生变化

  OF=0 当cnt=1时,移动后最高位的值未发生变化

  SF、ZF、PF根据移动后的结果设置


 ROL dst,cnt ; 循环左移(rotate left)

 执行操作:

 


 ROR dst,cnt ; 循环右移(rotate right)

 
执行操作:

 


 RCL dst,cnt ; 带进位循环左移(rotate left through carry) 

 执行操作:

 


 RCR dst,cnt ; 带进位循环右移(rotate right through carry)

 执行操作:

 


  这组指令完成位循环移位的操作,ROL和ROR是简单的位循环指令,RCL和RCR是连同CF位一起循环移位的指令。它们左右移动的方法以及移位次数的设置与移位指令类似。


  循环移位指令执行后,CF和OF的设置方法与移位指令相同;SF、ZF和PF标志位不受影响。

;SF、ZF和PF标志位不受影响。

串处理指令

       ⑴ 串处理指令

        MOVSB / MOVSW   串传送

        STOSB / STOSW   存串

        LODSB / LODSW   取串

        CMPSB / CMPSW   串比较

        SCASB / SCASW   串扫描


       ⑵ 串重复前缀

        REP        重复串操作

        REPE / REPZ    相等/为零时重复

        REPNE / REPNZ   不等/不为零时重复


       ⑶ 设置方向标志

        CLD        使DF=0

        STD        使DF=1

设置方向标志:DF=0..串的传送从低地址向高地址传送.如果DF=1串的传送从高地址向低地址传送

串处理指令处理存放在存储器中的字节串或字串,串处理的方向由方向标志位DF决定,串处理指令之前可加重复前缀,在执行串处理指令时,源串的指针SI和目的串的指针DI根据DF的指示自动增量(+1或+2)或自动减量(