汇编-SHLD/SHRD双精度左右移位指令
SHLD(双精度左移) 指令
将目的操作数向左移动指定的位数。移位形成的空位由源操作数的最高有效位填充。源操作数不受影响,但是符号标志、零标志、辅助进位标志、奇偶标志及进位标志会受影响:
.386 .model flat,stdcall option casemap:none .stack 4096 Include Irvine32.inc includelib Irvine32.lib ExitProcess PROTO,dwExitCode:DWORD .data .code main PROC mov cx,1011100000000100b mov bx,1011100000000100b shld bx,cx,2 ;cx=B804=1011100000000100b 没有改变 ;bx=E012=1110000000010010b ;移动次数是2,cx的高2位复制到bx的低2位 quit: mov eax,[esi] INVOKE ExitProcess,0 main ENDP END main
SHRD(双精度右移) 指令
将目的操作数向右移动指定的位数。移动形成的空位由源操作数的最低有效位填充:
形式:
下面的指令格式可应用于SHLD和SH RD。目的操作数可以是寄存器或内存操作数, 源操作数必须是寄存器。移位次数操作数可以是CL寄存器或者8位立即操作数:
SHLD 16位寄存器,16位寄存器,cl寄存器或者8位立即数
SHLD 16位内存数,16位寄存器,cl寄存器或者8位立即数
SHLD 32位寄存器,32位寄存器,cl寄存器或者8位立即数
SHLD 32位内存数,32位寄存器,cl寄存器或者8位立即数