汇编语言中各种移位指令的区别与联系

2022-09-06 10:43:14 浏览数 (2)

大家好,又见面了,我是你们的朋友全栈君。

本文转载自:https://blog.csdn.net/richerg85/article/details/27558005

SHL、SHR、SAL、SAR: 移位指令


代码语言:javascript复制
代码语言:javascript复制
;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, 高位不变

;它们的结果影响 OF、SF、ZF、PF、CF
;它们的指令格式相同:
SHL r/m, i8

SHL r/m, CL

ROL、ROR、RCL、RCR: 循环移位指令


代码语言:javascript复制
代码语言:javascript复制
;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, i8
SHL r/m, CL

使用的时候务必区别清楚:

逻辑移位指令移出位进CF,缺位补0;算术移位时若缺低位,则补0,若缺高位,则保持该位不变。

循环移位指令中,rol与ror是不带cf位的循环移位,rcl与rcr是带cf位的循环移位。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/133176.html原文链接:https://javaforall.cn

0 人点赞