【发布时间】:2021-06-06 07:19:00
【问题描述】:
从 m/m 位置 2500H 存储了 N 个字节。 N 的值存储在 2400H 中。如何编写一个 8085 程序来交换所有字节的位 Di 和 Dj(无论位值如何)。 i=4 和 j=0 的值
【问题讨论】:
标签: microprocessors 8085
从 m/m 位置 2500H 存储了 N 个字节。 N 的值存储在 2400H 中。如何编写一个 8085 程序来交换所有字节的位 Di 和 Dj(无论位值如何)。 i=4 和 j=0 的值
【问题讨论】:
标签: microprocessors 8085
没有人愿意为你做作业。话虽如此,下面是如何将 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 字节重复此过程将完成所需的任务。
【讨论】: