轮到寄存器最多 8 的倍数
Round Register up to multiple of 8
我正在尝试将 64 位寄存器四舍五入为 8 的倍数。因此它以 8 或 0 结尾。
有没有高效的方法,我目前是这样操作的:
xor r9, r9
_R:
add r9, 08h
cmp r8, r9
ja _R
mov r8, r9
要将值四舍五入为八的倍数需要两个语句并且没有循环:
add r9, 7
and r9, 0fffffffffffffff8H
第一个将 还不是 八的倍数的任何值移动到 "next highest section" 中。第二轮将 向下 为八的倍数。所以你会得到如下结果:
orig add and
0 7 0
1 8 8
: : :
7 14 8
8 15 8
9 16 16
请注意,如果您想要对 已经 八的倍数(例如 8 -> 16
)的数字进行四舍五入,只需加八而不是七。
我正在尝试将 64 位寄存器四舍五入为 8 的倍数。因此它以 8 或 0 结尾。
有没有高效的方法,我目前是这样操作的:
xor r9, r9
_R:
add r9, 08h
cmp r8, r9
ja _R
mov r8, r9
要将值四舍五入为八的倍数需要两个语句并且没有循环:
add r9, 7
and r9, 0fffffffffffffff8H
第一个将 还不是 八的倍数的任何值移动到 "next highest section" 中。第二轮将 向下 为八的倍数。所以你会得到如下结果:
orig add and
0 7 0
1 8 8
: : :
7 14 8
8 15 8
9 16 16
请注意,如果您想要对 已经 八的倍数(例如 8 -> 16
)的数字进行四舍五入,只需加八而不是七。