sra(右移算术)与 srl(逻辑右移)

use*_*931 5 assembly mips bit-shift twos-complement

请看一下这两段伪汇编代码:

1)

li $t0,53

sll $t1,$t0,2
srl $t2,$t0,2
sra $t3,$t0,2

print $t1  
print $t2  
print $t3  
Run Code Online (Sandbox Code Playgroud)

2)

li $t0,-53


sll $t1,$t0,2
srl $t2,$t0,2
sra $t3,$t0,2

print $t1
print $t2
print $t3
Run Code Online (Sandbox Code Playgroud)

在第一种情况下,输出为:
212
13
13

后者是:
-212
107374...
-14
但不应该:sra (-53) = - (srl 53) ?

ike*_*ami 4

-53 = 1111111111001011

           sra 2

      1111111111110010(11) = -14
       ^^              ^^
      sign           dropped
    extension
Run Code Online (Sandbox Code Playgroud)

由于对于正结果和负结果都会简单地删除额外的位,因此如果将移位视为除法,则结果始终向下舍入。

 53 sra 2 = floor( 53 / 2^2) = floor( 13.25) =  13
-53 sra 2 = floor(-53 / 2^2) = floor(-13.25) = -14
Run Code Online (Sandbox Code Playgroud)