Примеры использования команд сдвига.
Пример 1. Установить в 1 бит i
двойного слова x, если значение i вычисляется в программе.
Mov cl, [i]
mov 1, eax
shl eax, cl
or [x], eax
Пример 2. Задан массив чисел, каждое число не более 32. Упаковать этот массив таким образом, чтобы под каждое число отводилось 5 бит.
Ideal
p386
model flat
extrn ExitProcess:proc
dataseg
x db 3,5,7,9,2,4,6
xpack db (((xpack-x)*8+4)/5) dup (0)
count dd xpack - x
codeseg
begin:
mov eax, [count]
; for (i=0; i< count; i++){
unsigned *p = xpack+(i*5)/8
}
mov esi, 0;
mov ebx, 0
fori:
mov dx, 0
mov ecx, ebx
and ecx, 7
mov dl, [x+esi]
shl dx, cl
mov ecx, ebx
shr ecx, 3
or [xpack+ecx], dx
add ebx, 5
inc esi
cmp esi, [count]
jl fori
call ExitProcess
end begin