sar
Arithmetic shift right
Shifts the destination right arithmetically by the given count, filling the top bits with copies of the sign bit.
8086 and later
Intel's reference: SAL/SAR/SHL/SHR
Used in
- Arithmetic, logic and bitsx86-64 assembly
CFPFAFZFSFDFOF ●●?●●–?
- ● set from the result
- ? undefined afterwards
- – not changed
- OF Defined only for a count of 1.
- A count of 0 leaves every flag unchanged.
Forms
Operands
r/m- A general-purpose register or memory location matching the operation’s size, for example
raxorqword [rbp-8]. The byte registersah,bh,chanddhcannot be used with a REX prefix, including when the memory address usesr8–r15. imm8- An 8-bit immediate,
-128to255. Instructions that sign-extend it to a wider operand interpret the byte as-128to127; shift counts do not use this sign extension.
shl and its synonym sal shift left and fill low bits with zeros. shr shifts right and fills high bits with zeros; sar shifts right and repeats the original sign bit. When defined, CF receives the last bit shifted out. OF is defined only for a count of one; CF is undefined for a shl or shr count at least as large as the operand width.
The count comes from an immediate or cl. A 64-bit operand uses the low six bits of the count; 8-, 16- and 32-bit operands use the low five. Thus shl rax, 32 shifts by 32, while shl eax, 32 has a masked count of zero.
global _start
section .text
_start:
mov rax, 12
mov rbx, 5
mov rcx, 3
mov rsi, 9
sar rax, 1
mov rax, 60 ; syscall 60: exit
xor rdi, rdi
syscall