问题描述
从 m/m 位置 2500H 存储了 N 个字节。 N 的值存储在 2400H 中。如何编写 8085 程序来将所有字节的位 Di 与 Dj 交换(不考虑位值)。 i=4 和 j=0 的值
解决方法
没有人愿意为你做功课。话虽如此,下面是如何将 1 字节数据的第 i 位与第 j 位互换。
首先让我们回顾一下按位逻辑运算符及其用法。假设我们想知道是否设置了第 4 位,我们取一个位掩码 0000 1000
(即 08H
)并将它与数据一起 AND
。为了清除第二位,我们采用位掩码 1111 1101
(即 FDH
)和 AND
它与数据。而要设置第 6 位,我们采用位掩码 0000 0010
(即 02H
)并将其与数据一起 OR
。为了对第 4 位进行翻转,我们采用位掩码 0000 1000
(即 08H
)并将其与数据一起 XOR
。
假设实际数据在寄存器 D 中,因此我们可以将第 2 位与第 4 位交换:
MVI A,08H ;i-th bit
ORI 02H ;j-th bit
ANI D ;only 2nd and 4bit of the data survives
JPE SKIP ;if both bits are same (both 0 or both 1) no exchange required
;if not we need a swap,which is this case can be done by flipping the both
MOV A,D ;bring back the data again
XRI 08H ;flip the i-th bit
XRI 02H ;flip the j-th bit
SKIP: MOV D,A ;put the data back to D
位掩码可以通过适当数量的移位(或无进位循环)以编程方式生成。并在所有 n
字节上重复此过程将完成所需的任务。