汇编-SHL左移

SAL(算术左移)指令的操作与SHL 指令一样

SHL(左移)指令使目的操作数逻辑左移一位,最低位用 0 填充。最高位移入进位标志位,而进位标志位中原来的数值被丢弃:

 若将 1100 1111 左移 1 位,该数就变为 1001 1110:

 格式:

SHL destination,count

第一个操作数是目的操作数,第二个操作数是移位次数

 

该指令可用的操作数类型如下所示:
SHL reg, imm8
SHL mem, imm8
SHL reg, CL
SHL mem, CL

x86 处理器允许 imm8 为 0〜255 中的任何整数。另外,CL 寄存器包含的是移位计数。上述格式同样适用于 SHR、SAL、SAR、ROR、ROL、RCR 和 RCL 指令

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data   
    
 
.code   
main PROC   
    mov bl,8Fh   ;BL = 10001111b
    shl bl,1     ;CF = 1, BL = 00011110b
            
  
    INVOKE ExitProcess,0  
main ENDP   
END main

 

 

当一个数多次进行左移时,进位标志位保存的是最后移岀最高有效位(MSB)的数值。下例中,位 7 没有留在进位标志位中,因为,它被位 6(0)替换了

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data   
    
 
.code   
main PROC   
    mov bl,8Fh   ;BL = 10000000b
    shl bl,2    ;CF = 0, AL = 00000000b
            
  
    INVOKE ExitProcess,0  
main ENDP   
END main

 

任何操作数左移 n 位,即将该数乘以 2n。现将整数 5 左移一位则得到 5 x 2¹ = 10:

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data   
    
 
.code   
main PROC   
    mov ebx,5
    shl ebx,1    ;EBX = 0000000A
            
  
    INVOKE ExitProcess,0  
main ENDP   
END main

 

 

.386  
.model flat,stdcall 
option casemap:none
.stack 4096

ExitProcess PROTO,dwExitCode:DWORD  
 
.data   
    
 
.code   
main PROC   
    mov cl,2
    mov ebx,5
    shl ebx,2    ;EBX = 00000014h=20
            
  
    INVOKE ExitProcess,0  
main ENDP   
END main

 

 

 

 

 

 

posted @ 2023-12-06 10:33  天子骄龙  阅读(354)  评论(0)    收藏  举报