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, 高位不变

;它们的结果影响 OF、SF、ZF、PF、CF
;它们的指令格式相同:
SHL r/m, i8
SHL r/m, CL
; Test24_1.asm
.386
.model flat, stdcallinclude    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main proc ;SHL、AL
    mov al, 11100111bshl al, 1PrintHex al ;CE - 11001110b
    sal al, 2PrintHex al ;38 - 00111000b
    mov al, 11100111bmov cl, 2shl al, clPrintHex al ;9C - 10011100b
     ;SHR
    mov al, 11100111bshr al, 2PrintHex al ;39 - 00111001b
     ;SAR
    mov al, 11100111bsar al, 2PrintHex 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, i8
SHL r/m, CL
; Test24_2.asm
.386
.model flat, stdcallinclude    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main proc ;ROL
    mov al, 11000011brol al, 1PrintHex al ;87 - 010000111b
     ;ROR
    mov al, 11000011bror al, 1PrintHex al ;E1 - 11100001b
     ;RCL
    clcmov al, 10101111brcl al, 1PrintHex al ;5E - 01011110b
    stcmov al, 10101111brcl al, 1PrintHex al ;5F - 01011111b
    clcmov al, 10101111brcl al, 2PrintHex al ;BD - 10111101b
     ;RCR
    clcmov al, 11101011brcr al, 2PrintHex 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
; Test25_3.asm
.386
.model flat, stdcallinclude    windows.inc
include    kernel32.inc
include    masm32.inc
include    debug.inc
includelib kernel32.lib
includelib masm32.lib
includelib debug.lib.code
main proc ;SHLD
    mov ax, 1100110011110000bmov dx, 1111111100000000bshld ax, dx, 2PrintHex ax ;33C3 - 0011001111000011b
     ;SHRD
    mov ax, 0000111100110011bmov dx, 0000000011111111bshrd ax, dx, 2PrintHex ax ;C3CC - 1100001111001100b
    ret
main endp
end main

学 Win32 汇编[24] - 移位: SHL、SHR、SAL、SAR、ROL、ROR、RCL、RCR、SHLD、SHRD相关推荐

  1. Win32ASM学习[13]:移位指令SHL,SHR,SAL,SAR,ROL,ROR,RCL,RCR,SHLD,SHRD

    一. SHL.SHR.SAL.SAR: 移位指令 --------------------------------------------------------------------------- ...

  2. 学 Win32 汇编[17]: 关于压栈(PUSH)与出栈(POP) 之一

    记得刚学多线程的时候, 碰到一个结构: //Delphi 的语法描述 PContext = ^TContext; _CONTEXT = recordContextFlags: DWORD;Dr0: D ...

  3. 学 Win32 汇编[6]: 伪指令 DUP 与数组

    为什么80%的码农都做不了架构师?>>>    声明数组实例: ; Test6_1.asm .386 .model flat, stdcallinclude windows.inc ...

  4. 学 Win32 汇编[12]: PTR、OFFSET、ADDR、THIS

    为什么80%的码农都做不了架构师?>>>    PTR: 指定要操作的数据尺寸 ; Test12_1.asm .386 .model flat, stdcallinclude win ...

  5. 学 Win32 汇编[27] - 乘除指令: MUL、IMUL、DIV、IDIV

    MUL: 无符号乘 ;影响 OF.CF 标志位 ;指令格式: ;MUL r/m ;参数是乘数;如果参数是 r8/m8, 将把 AL 做乘数, 结果放在 AX ;如果参数是 r16/m16, 将把 AX ...

  6. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等...

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  7. 学 Win32 汇编[26] - 加减指令: INC、DEC、NEG、ADD、ADC、SUB、SBB、CMP

    为什么80%的码农都做不了架构师?>>>    ;INC(Increment): 加一 ;DEC(Decrement): 减一 ;NEG(Negate): 求补(求反) ;ADD(A ...

  8. 学 Win32 汇编[28] - 跳转指令: JMP、JECXZ、JA、JB、JG、JL、JE、JZ、JS、JC、JO、JP 等

    跳转指令分三类: 一.无条件跳转: JMP; 二.根据 CX.ECX 寄存器的值跳转: JCXZ(CX 为 0 则跳转).JECXZ(ECX 为 0 则跳转); 三.根据 EFLAGS 寄存器的标志位 ...

  9. 【Android 逆向】x86 汇编 ( add / sub / mul / div 数值运算指令 | xor / not / sal / sar / shl / shr 位运算指令 )

    文章目录 一.add / sub / mul / div 数值运算指令 二.xor / not / sal / sar / shl / shr 位运算指令 总结 一.add / sub / mul / ...

最新文章

  1. R语言length函数计算向量、列表、字符串长度实战
  2. jquery如何调用后台的方法
  3. FZU 1901 Period II(KMP中的next)题解
  4. 试用 Vista RC1 ,正式版离我们越来越近
  5. Python 列表 min() 方法
  6. 基于 HTML5 WebGL 的 3D 场景中的灯光效果
  7. 数据结构 —— 递归和树
  8. 重构:改善既有代码的设计 精彩书评一
  9. Math源码java_从零开始的Java学习记录(26)——Math类及其些许源码
  10. 训练GAN,你应该知道的二三事
  11. android解析json数据格式,Android编程解析Json格式数据的方法
  12. Android安卓——Android程序生命周期
  13. landsat8 Collection 1和Collection 2若干问题详细整理
  14. 数据结构课程设计报告
  15. Large Scale Machine Learning--An Engineering Perspective--0. 引言
  16. 离散题目10(判断是否为满射函数 )
  17. Python项目实战:使用PySpark对大数据进行分析
  18. 记录一次分布式微服务架构搭建过程
  19. 淘淘商城的第一天(传智播客2015年9月份项目)
  20. 和一个已经浙大本科毕业,现已年入百万的高管交流,交流时长一小时,看看我们究竟谈了什么?

热门文章

  1. linux下检查是否安装过某软件包(gcc,pcre-devel,zlib-devel,openssl-devel)
  2. 安卓海豚wii模拟器_dolphin模拟器安卓版
  3. 怎么看待《百度清风算法3.0》?
  4. JFrame添加图片以及使用的教程
  5. dubbo解析-Merger接口作用及其实现类介绍
  6. 51单片机 玩转按键加减切换+数码管+Proteus仿真
  7. 我的世界服务器回到死亡位置,我的世界返回死亡地点指令是什么
  8. N-ary 题型总结
  9. 微商城分销系统软件首选—好分销微信三级分销系统源码定制
  10. 【ROS】移动机器人导航仿真(2)——SLAM(gmapping)