Круглый регистр до кратного 8 - PullRequest
0 голосов
/ 14 ноября 2018

Я пытаюсь округлить 64-битный регистр, чтобы он был кратен 8. Таким образом, он заканчивается либо 8, либо 0.

Есть ли эффективный способ сделать это, в настоящее время я делаю это следующим образом:

xor r9, r9
_R:
    add r9, 08h
    cmp r8, r9
ja _R
mov r8, r9

1 Ответ

0 голосов
/ 14 ноября 2018

Для округления значения, кратного восьми, требуется два оператора и нет циклов:

add r9, 7
and r9, 0fffffffffffffff8H

Первый перемещает любое значение, которое не уже aкратное восьми в «следующий наивысший раздел».Вторые раунды, которые понижаются до кратного восьми.Таким образом, вы получите такие результаты:

orig  add  and
   0    7    0
   1    8    8
   :    :    :
   7   14    8
   8   15    8
   9   16   16

Обратите внимание, что если вы хотите округлить даже те числа, которые уже кратны восьми (например, 8 -> 16), простодобавь восемь вместо семи.

...