我在上微处理器的课,我们正在用飞思卡尔CodeWarrior的汇编语言来编写68HCS12微控制器的程序。我们本周的任务是反转一个字节,因此如果字节是00000001,则输出将是10000000,或00101011到11010100。我们必须使用汇编语言,并且被告知我们可以使用旋转和移位(但不限于!)来完成这项任务。我真的不知所措,不知道该从哪里开始。
发布于 2011-02-08 01:19:26
如果您可以节省256字节的额外代码大小,查找表可能是在68HCS12上反转字节的最有效的方法。但我很确定这不是你的讲师所期望的。
对于“正常”的解决方案,请单独考虑数据位。旋转和平移允许您移动比特。对于第一种解决方案,隔离8位(使用逐位“与”运算),将它们移动到其目标位置(移位、旋转……),然后再次将它们组合在一起(使用逐位“或”运算)。这不是最有效或最简单的实现,但您应该首先专注于获得正确的结果--优化可以等待。
发布于 2011-02-08 01:11:45
提示:如果你做移位,一位被移出,一个零(可能)被移入。那个移出的比特去了哪里?您需要将其移入目标寄存器或内存地址的另一端。
我确信25年前,我可以在没有汇编程序的情况下用Z80机器码做到这一点:)
发布于 2011-02-08 01:08:26
将两个寄存器视为位堆栈。如果一次移动一个比特到另一个比特,会发生什么?
https://stackoverflow.com/questions/4924060
复制相似问题