Win32ASM学习[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD
来源:互联网 发布:linux为什么要挂载 编辑:程序博客网 时间:2024/04/26 06:49
一. SHL、SHR、SAL、SAR: 移位指令
----------------------------------------------------------------------------------------------------
;SHL(Shift Left): 逻辑左移
;SHR(Shift Right): 逻辑右移
;SAL(Shift Arithmetic Left): 算术左移
;SAR(Shift Arithmetic Right): 算术右移
;其中的 SHL 和 SAL 相同, 但 SHR 和 SAR 不同.
;SHL、SAL: 每位左移, 低位补 0, 高位进 CF
;SHR : 每位右移, 低位进 CF, 高位补 0
;SAR : 每位右移, 低位进 CF, 高位不变,(在每次右移时,保持最高位(符号位)不变,最低位右移至CF中)
;它们的结果影响 OF、SF、ZF、PF、CF
;它们的指令格式相同:SHL r/m, i8SHL r/m, CL
----------------------------------------------------------------------------------------------------
.code
main proc
;SHL、AL
mov al, 11100111b
shl al, 1
PrintHex al ;CE - 11001110b
sal al, 2
PrintHex al ;38 - 00111000b
mov al, 11100111b
mov cl, 2
shl al, cl
PrintHex al ;9C - 10011100b
;SHR
mov al, 11100111b
shr al, 2
PrintHex al ;39 - 00111001b
;SAR
mov al, 11100111b
sar al, 2
PrintHex al ;F9 - 11111001b
ret
main endp
end main
------------------------------------------------------------------------------------------------
ROL、ROR、RCL、RCR: 循环移位指令
-----------------------------------------------------------------------------------------------------------------------------------------------
;ROL(Rotate Left): 循环左移
;ROR(Rotate Right): 循环右移
;RCL(Rotate through Carry Left): 带进位循环左移
;RCR(Rotate through Carry Right): 带进位循环右移
;ROL: 循环左移, 高位到低位并送 CF
;ROR: 循环右移, 低位到高位并送 CF
;RCL: 循环左移, 进位值(原CF)到低位, 高位进 CF
;RCR: 循环右移, 进位值(原CF)到高位, 低位进 CF
;它们的结果影响 OF、CF
;它们的指令格式相同:SHL r/m, i8SHL r/m, CL
说明: 1. 本指令组只影响标志CF、OF.OF由移入CF的内容决定,OF取决于移位一次后符号位是否改变,如改变,则OF=1.
2. 由于是循环移位,所以对字节移位8次; 对字移位16次,就可恢复为原操作数.由于带CF的循环移位,可以将CF的内容移入,所以可以利用它实现多字节的循环.
3. 示例: 将AL中的组合的两个BCD分解为两个未组合的BCD数,存于BH及BL寄存器中程序为:
MOV AH,AL ;保存AL内容至AH中
MOV CL,4 ;循环次数4送CL
SHR AL,CL ;将AL右移4次,高4位移至低4位
MOV BH,AL ;高位BCD送BH中
AND AH,0FH ;得到低位BCD数
MOV BL,AH ;低位BCD数送BL中
注意: 以上程序中的指令SHR AL,CL如改为SAR AL,CL,虽然最高4位可移入低4位,但最高位不为0,故应加入一条指令AND AL,0FH.否则,若最高位不为0时,将得到错误结果.
-----------------------------------------------------------------------------------------------------------------------------------------------
.code
main proc
;ROL
mov al, 11000011b
rol al, 1
PrintHex al ;87 - 010000111b
;ROR
mov al, 11000011b
ror al, 1
PrintHex al ;E1 - 11100001b
;RCL
clc
mov al, 10101111b
rcl al, 1
PrintHex al ;5E - 01011110b
stc
mov al, 10101111b
rcl al, 1
PrintHex al ;5F - 01011111b
clc
mov al, 10101111b
rcl al, 2
PrintHex al ;BD - 10111101b
;RCR
clc
mov al, 11101011b
rcr al, 2
PrintHex al ;BA - 10111010b
ret
main endp
end main
----------------------------------------------------------------------------------------------------
SHLD、SHRD: 双精度移位
;SHLD(Double-Precision Shift Left): 双精度左移
;SHRD(Double-Precision Shift Right): 双精度右移
;SHLD 和 SHRD 有三个操作数
;操作数三: 是移位数目;操作数一: 是目的操作数
;SHLD 左边被移出的位由操作数二相同数目的高位填充
;SHRD 右边被移出的位由操作数二相同数目的低位填充
;操作数二不变, 且须是寄存器;它们的结果影响 OF、SF、ZF、PF、CF
;它们的指令格式相同:
SHLD r16/32/m16/m32, r16/32, i8
SHLD r16/32/m16/m32, r16/32,CL
双精度数左移指令 SHLD
格式: SHLD OPD,OPS,n(n表示一个常数)
功能: 指令左移OPD,移位的次数由n确定,移入OPD右边的各位由OPS提供,这里要求OPD和OPS类型相同,OPD移出的位进入CF.
双精度数右移指令 SHRD
格式: SHRD OPD,OPS,n(n表示一个常数)
功能: 指令右移OPD,移位的次数由n确定,移入OPD左边的各位由OPS提供,这里要求OPD和 ---- OPS类型相同,OPD移出的位进入CF.
----------------------------------------------------------------------------------------------------
.code
main proc
;SHLD
mov ax, 1100110011110000b
mov dx, 1111111100000000b
shld ax, dx, 2
PrintHex ax ;33C3 - 0011001111000011b
;SHRD
mov ax, 0000111100110011b
mov dx, 0000000011111111b
shrd ax, dx, 2
PrintHex ax ;C3CC - 1100001111001100b
ret
main endp
end main
-----------------------------------------------------------------------------------------------------
- Win32ASM学习[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD
- Win32 汇编 - 移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR、SHLD、SHRD
- 汇编移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR
- 汇编移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR 汇编移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR
- ROL,ROR,SAR,SHR,SAL,SHL区别
- DAA 、DAS 、ROR 、ROL 、RCR 、RCL
- 关于循环位移指令ROL,RCL ;逻辑右移指令 SHR , 算术右移指令 SAR
- 双精度移位指令SHLD,SHRD
- 8086逻辑移位指令SHL和SHR
- 8086算术移位指令SAL和SAR
- 汇编指令--移位操作SHL、SHR、CAL、CAR
- SHL、SHR指令的区别
- Delphi Shl与Shr 移位操作介绍
- 汇编 shl和shr指令的使用
- 汇编指令---ROL和ROR指令
- shl,shr 移位处理字模提取的数据
- 三菱PLC学习数据移位指令ROR D N
- shl和shr
- sicily 1761
- 经典算法研究系列:一、A*搜索算法
- [科普文] 关于浏览器内核的一些小知识,明明白白选浏览器!
- Red Hat Linux中把当前用户加入sudo用户组中
- [教程] system.img解包打包的方法,方便菜鸟们制作直刷ROM
- Win32ASM学习[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD
- 我的助理辞职了!
- 类和接口
- Rails3入门之九 删除评论
- mysql权限
- BNF范式和EBNF范式
- linux 终端快捷键
- Galerkin方法
- 利用子进程拷贝文件的前半部分,副进程拷贝后半部分C代码