什么是带有延伸的循环移位?

DrZ*_*214 7 assembly 68000 instruction-set bit-shift cpu-architecture

我记得在集会课上,我们学习了m68k处理器,你可以做3种转换.线性移位,循环移位和带有延伸的圆形移位.

最后一个,带有extend的循环移位,基本上是向左或向右旋转所有位,但它将最外面的位置放到一个延伸位,然后再将它移动到开头(如果你再次移动1).

我画了一张小图:

在此输入图像描述

基本上,在循环移位中使用第33位,但当然不会出现在32位字中.第33位是处理器的X标志,代表扩展.你可以很容易地使用任何状态标志,例如进位标志,但我想摩托罗拉人想要保留那个标志,这样它就不会被覆盖,以防万一你需要进行正常职责的进位标志.一些算法也需要用extend进行旋转.

无论如何,使用extend旋转的目的是什么?它是干什么用的?需要什么?看起来很奇怪.为什么世界上你需要第33位?

我读过这个这个,两个相关的问题,但他们并没有谈及该循环移位与延伸.

我知道正常班次的一些用途.基本上除以2,或测试可分性,并置换随机性位.类似的东西.但是我想不出为什么你需要在旋转中插入一些扩展位而不会在结果中出现.

编辑:我对它的任何使用感兴趣,无论是现代的还是旧的,如果它在m68k上都无关紧要.m68k只是我遇到它的第一个位置(我从来没有在那里使用它).

fuz*_*fuz 2

假设您想要将 32 位字右移,但您只有 16 位寄存器。为此,您必须将 32 位字的两个 16 位部分向右移位,并将从高位字移出的位转移到低位字中。

如果您只有逻辑转变,那么这样做很麻烦,因为您必须手动修复该位。循环进位指令允许您将需要传输的位保留在进位标志中,并将其一次性移入。循环进位指令将移出的位放入进位标志中,以便您可以轻松地将其链接在一起以右移任意大小的数据。