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

来源:互联网 发布:淘宝我的收藏在哪里 编辑:程序博客网 时间:2024/04/26 04:28
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


(转载自:http://www.cnblogs.com/del/archive/2010/04/15/1712490.html)

原创粉丝点击