0

我想将一个半字节从累加器移动到 P1 的上半字节。

现在,我一点一点地设置半字节

MOV C, ACC.3
MOV P1.7, C
MOV C, ACC.2
MOV P1.6, C
MOV C, ACC.1
MOV P1.5, C
MOV C, ACC.0
MOV P1.4, C

这对我来说似乎是一种糟糕的方式:它需要 12 个指令周期并且代码很长。我希望SWAP并且XCHD会做到这一点,但间接寻址似乎在 SFR 内存区域中不起作用。

有没有更快或更短(不一定都是)的编码方式?我想让 P1 的下半字节保持不变。

4

2 回答 2

1

我不熟悉那个 CPU,但你可以用 1 AND、 1SHL和 1OR对字节进行操作。

在 Intel 8086+ 上, whereal代表 8 bit-ACCbl代表 8bit- P1,它会是这样的:

and bl, 0x0f    # clear high nybble
ror al, 8       # or shl 8 if accumulator can be discarded
or  bl, al
于 2015-10-27T19:37:07.060 回答
1

如果您使用 P1 的低 4 位作为输入,您希望将它们设置为1并且很容易组合到您的代码中。

swap A
orl A, #15
mov P1, A

如果将它们用作输出,则可以使用 read-modify-write,例如:

anl A, #15
swap A
anl P1, #15
orl P1, A

请注意,这将暂时将引脚 3-7 归零。如果这不可接受,您将不得不在寄存器中计算新值。

于 2015-10-27T19:47:01.280 回答