汇编-SHR右移

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

 

格式:

SHR destination,countR

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

 

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

x86 处理器允许 imm8 为 0〜255 中的任何整数。另外,CL 寄存器包含的是移位计数

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

ExitProcess PROTO,dwExitCode:DWORD  
 
.data       
 
.code   
main PROC   
    
    mov al, 0D0h     ; AL = 11010000b
    shr al,1         ;AL = 01101000b, CF = 0

    INVOKE ExitProcess,0  
main ENDP   
END main

 

在多位移操作中,最后一个移出位 0(LSB)的数值进入进位标志位:

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

ExitProcess PROTO,dwExitCode:DWORD  
 
.data       
 
.code   
main PROC   
    
    mov al, 00000010b
    shr al, 2            ;AL = 00000000b, CF = 1

    INVOKE ExitProcess,0  
main ENDP   
END main

 

将一个无符号数右移 n 位,即将该数除以 2n

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

ExitProcess PROTO,dwExitCode:DWORD  
 
.data       
 
.code   
main PROC   
    
    mov edx,32        ;移动前:00100000 = 32
    shr edx,1               ;移动后:00010000 = 16

    INVOKE ExitProcess,0  
main ENDP   
END main

 

 

 

 

 

 

 

posted @ 2023-12-07 07:01  天子骄龙  阅读(273)  评论(0)    收藏  举报