您可以使用与本答案中所示相同的方式,当然使用不同的常量.
7 mod 2 16的模乘法逆是0x6db7,(根据定义)意味着表格的数字x = n * 7将服从x * 0x6db7 = n,其中n将小于或等于0xffff / 7.因此,如果你得到更大的东西x * 0x6db7,你知道它不是7的倍数.而且,7的非倍数也不能映射到低结果,因为乘以2的幂的奇数模乘是双射的.
所以你可以使用(未测试)
imul ax, ax, 0x6db7
cmp ax, 0x2492
ja not_multiple_of_7
Run Code Online (Sandbox Code Playgroud)
这当然是无符号数.
作为奖励,如果它是7的倍数,ax则将原始值除以7.
| 归档时间: |
|
| 查看次数: |
1322 次 |
| 最近记录: |