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


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, i8SHL r/m, CL; Test24_1.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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    retmain endpend 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; Test24_2.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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    retmain endpend 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, i8SHLD r16/32/m16/m32, r16/32, CL; Test25_3.asm.386.model flat, stdcallinclude    windows.incinclude    kernel32.incinclude    masm32.incinclude    debug.incincludelib kernel32.libincludelib masm32.libincludelib debug.lib.codemain 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    retmain endpend main

posted on 2010-04-15 11:39 万一 阅读(9351) 评论(1) 编辑 收藏©著作权归作者所有:来自51CTO博客作者JLee79的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. C语言判断大端小端
  2. golang服务器+android 生成相同md5码
  3. android 进制转换 (高低位)
  4. Java,Android Integer和byte的相互转换,Java Android给定范围随机
  5. Objective C - 与Android交互时高低位转换:
  6. PHP中的进制转换
  7. 关于几个位运算的算法分析
  8. 生成真值组合【Java实现】

随机推荐

  1. 解析Android如何利用Handler
  2. Android官方入门文档[3]构建一个简单的用
  3. TextVview的属性
  4. Android Studio中Gradle使用详解
  5. Android OnTouchListener实时监听触点坐
  6. android 下载文件注意事项
  7. android 如何判断软件是否第一次运行?
  8. Android TextView中链接(link)点击事件的
  9. Android 动画旋转效果
  10. Android(安卓)UI开发第三十九篇——Tab界