【发布时间】:2017-02-15 09:23:31
【问题描述】:
假设我在 AL 中有这个字节:01100001
应用 mirror 函数后,我希望字节为10000110。
我想出的所有想法都必须使用其他寄存器,但我很好奇是否有办法在不使用任何其他寄存器的情况下镜像一个字节?
【问题讨论】:
-
当您说“其他寄存器”时,您是否包括 AH、AX、EAX 和 RAX 作为其他寄存器? - 我认为这可能需要几个操作(除非
BSWAP AL有效?)但由于您只使用单个字节,您可以使用 AH 存储来自 AL 的操作结果,从而充分利用单个寄存器(斧头) -
@series0ne OP 说反转位,而不是反转字节
-
您基本上有两种主要方式......要么从额外的代码指令中“借出”存储空间,用指令中编码的立即值替换“其他寄存器”,或者您可以使用进位标志(或其他标志)用于存储空间。起初我认为有一些 ROL/RCR 的组合可以优雅地利用 CF,但经过短暂的思考,到目前为止我一直没有想到,虽然直接的变体有点明显,但编写起来很乏味(很多代码行)。无论如何,你肯定必须有至少 1 位的额外存储空间,如果没有第三个没有“交换”指令,你就不能交换两位。
-
哦,当然 256 字节长的 LUT(查找表)也可以工作...... :D 我怎么忘了提到这个...... :)))(基本在 8 位时代“计算”任何东西的方法)