我记得在一个汇编课上,我们学习了m68k处理器,它有三种不同的移位方式:线性移位、循环移位和带扩展的循环移位。
最后一种带扩展的循环移位,基本上是将所有位向左或向右旋转,但是在将最外层的位移动到开头之前,它会将其放入一个扩展位中(如果您再次移位1)。
我画了一个小图: 基本上,在循环移位中使用了第33位,但当然不会出现在32位的单词中。第33位是处理器的X标志,代表扩展。你可以同样使用任何状态标志,例如进位标志,但我猜摩托罗拉的人想要保留该标志,以免被覆盖,在某些需要带有扩展旋转的算法中需要进位标志来执行其正常职责。
最后一种带扩展的循环移位,基本上是将所有位向左或向右旋转,但是在将最外层的位移动到开头之前,它会将其放入一个扩展位中(如果您再次移位1)。
我画了一个小图: 基本上,在循环移位中使用了第33位,但当然不会出现在32位的单词中。第33位是处理器的X标志,代表扩展。你可以同样使用任何状态标志,例如进位标志,但我猜摩托罗拉的人想要保留该标志,以免被覆盖,在某些需要带有扩展旋转的算法中需要进位标志来执行其正常职责。
无论如何,旋转带扩展的目的是什么?它用于什么?为什么需要它?它看起来很奇怪。为什么你需要第33位呢?
我阅读了this和this,这两个相关问题,但它们没有讨论带扩展的循环移位。
我知道一些普通移位的用途。基本上是除以二,或测试可除性,并对位进行排列以获得随机性。像那样的东西。但我想不出为什么你需要将一些扩展位插入到旋转中,但在结果中不会出现。
编辑:我对它的任何使用都感兴趣,无论是现代还是古老的,而且是否在m68k上并不重要。 m68k只是我第一次遇到它的地方(我甚至从未在那里使用过它)。