使用汇编语言反转一个字节

doh*_*gen 7 assembly reverse codewarrior bit-manipulation 68hc12

我在微处理器类中,我们在飞思卡尔CodeWarrior中使用汇编语言来编程68HCS12微控制器.本周我们的任务是反转一个字节,所以如果字节是00000001,输出将是10000000,或者是00101011到11010100.我们必须使用汇编语言,并被告知我们可以使用旋转和移位(但不限于! )完成这项任务.我真的不知道应该从哪里开始.

Spa*_*man 8

提示:如果你做了一个移位,一个位被移出,一个零(可能)被移入.那里移出的位去了哪里?您需要将其移入目标寄存器或存储器地址的另一端.

我敢肯定25年前我可以在没有汇编程序的Z80机器代码中做到这一点:)

  • 有更黑客的方法:http://graphics.stanford.edu/~seander/bithacks.html#BitReverseObvious(在C中,但可以在汇编中完成......) (2认同)

bdo*_*lan 7

将两个寄存器视为位堆栈.如果你一次从一个移动到另一个,会发生什么?


Tho*_*nin 6

如果你可以节省256字节的额外代码大小,那么查找表可能是在68HCS12上反转字节的最有效方法.但我很确定这不是教练期待的.

对于"正常"解决方案,请分别考虑数据位.旋转和移位允许您移动位.对于第一种解决方案,隔离8位(按位"和"操作),将它们移动到目标位置(移位,旋转......),然后再将它们组合在一起(使用按位"或"操作).这不是最有效或最简单的实现,但您应该首先集中精力获得正确的结果 - 优化可以等待.