Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 无硬件UDIV指令的ARM组件可分性测试_Assembly_Arm_Mod_Eabi - Fatal编程技术网

Assembly 无硬件UDIV指令的ARM组件可分性测试

Assembly 无硬件UDIV指令的ARM组件可分性测试,assembly,arm,mod,eabi,Assembly,Arm,Mod,Eabi,我在ARM汇编中编码有困难,我必须编码一些东西来说明r0是否可以被r1整除,所以我打算编码模来说明r0%r1==0,但也许有更好的方法(执行对话)来实现我想要的 我发现了,但它并没有真正帮助我,因为我的编译器(如果是编译器^^^^)是arm eabi gcc,它告诉我所选处理器不支持arm模式的“udiv”和“mls” 不管怎样,正如我刚才所说,我更愿意自己编写代码,因为老师们一直告诉我们mod和div的成本很高,所以也许有更好的方法来解决我的问题:d你可以使用欧几里得算法来看看gcd(r0,r

我在ARM汇编中编码有困难,我必须编码一些东西来说明r0是否可以被r1整除,所以我打算编码模来说明r0%r1==0,但也许有更好的方法(执行对话)来实现我想要的

我发现了,但它并没有真正帮助我,因为我的编译器(如果是编译器^^^^)是arm eabi gcc,它告诉我所选处理器不支持arm模式的“udiv”和“mls”


不管怎样,正如我刚才所说,我更愿意自己编写代码,因为老师们一直告诉我们mod和div的成本很高,所以也许有更好的方法来解决我的问题:d

你可以使用欧几里得算法来看看gcd(r0,r1)=r1。你到底为哪个处理器编程?;只有一个乘法和比较。它不是当您需要它处理寄存器中的任何值时。尽管硬件
div
/
udiv
速度较慢,但它是最好的解决方案。如果您的CPU在硬件中没有除法,那么您将需要某种循环。@fuz关于GCD的建议适用于不需要知道商或模的可分性测试。维基百科说欧几里德的算法在实践中并不是最快的。在实际CPU上速度更快,尽管两种算法都是O(n^2)最坏情况时间,其中
n
是较大数字中的位数。实现欧几里德算法的一个好方法是顺便提一下。在ARM上实现它应该很有趣,您可以找到我自己的x86实现供参考。