大家好,又见面了,我是你们的朋友全栈君。
学习概要
格式


移位指令主要分四种

一、逻辑移位指令
1.逻辑左移指令SHL


2.逻辑右移指令SHR


3.逻辑移位指令的功能

二、算术移位指令
1.算术左移指令SAL


2.算术右移指令SAR


最高位不变的意思就是,最高位原来是1(0),右移过后最高位就补1(0)。
3.算术移位指令的功能

三、循环移位指令
1.循环左移指令ROL


2.循环右移指令ROR


四、带进位的循环移位指令
1.带进位的循环左移指令RCL


2.带进位的循环右移指令


移位指令对标志位的影响
1.算术、逻辑指令
- CF的影响比较明显,就看移位规则。
- SF、ZF看移位后的结果
- OF 当移位次数不为1时无定义。当移位操作改变了操作数的最高位时-符号位,OF=1,否则为0
2.循环移位指令
- CF看移位规则
- SF、ZF 不受影响
- OF 当移位次数不为1时无定义。当移位操作改变了操作数的最高位时-符号位,OF=1,否则为0
区别就在于SF和ZF ,算术、循环指令看结果,循环指令无影响
例
1.

分析,AX逻辑左移时,最高位应该移进DX。逻辑左移AX时最高位时保存在CF里边,所以要想DX的最低位是AX移动的最高位,对DX进行带进位的循环左移。
2.

分析:假设数据为无符号数,结果仍为16位,不溢出。 乘3可以换成2的幂加减。比如换成逻辑左移2位(相当于乘4),再减去一次。或者逻辑左移移位(相当于乘2),再加一次。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/134648.html原文链接:https://javaforall.net
