汇编语言8085 ..如何找到偶数/奇数奇偶校验

时间:2013-03-17 02:57:39

标签: assembly 8085

我有以下代码来计算1的数量并将其保存到reg B.我需要修改它以查找奇偶校验是偶数还是奇数......

LXI H, var1
MVI B, 00H
MVI D, 00H
MVI C, 08H
MOV A, M

LOOP: RAR
JNC SKIP
INR B
SKIP: DCR C
JNZ LOOP

HLT

var1: db 72

2 个答案:

答案 0 :(得分:3)

按位AND注册B,其值为1。如果结果为1,则为奇数奇偶校验。如果结果是0,则它甚至是奇偶校验。那是因为偶数在最低位总是0,奇数总是1

访问非常 8080级程序集的模糊记忆,但我认为它会是这样的:

          MOV      A, B
          ANI      01H
          JZ       par_even
par_odd   ; parity is odd here, work your magic
          JMP      over

par_even  ; parity is even here, work other magic

par_done  ; carry on processing here

例如,您使用的值7264 + 8或二进制01001000

因此,假设您的位计数代码正常工作,则注册B将设置为2,或00000010。与00000001进行AND运算可得到0,因此均衡。

或者,值25411111110会将注册B设置为700000111。使用00000001进行AND运算得{4},因此奇偶校验。

您还可以使用以下内容:

1

其中A是而不是1位的计数。

可能需要ANA的原因是确保根据累加器的内容设置奇偶校验标志。只有某些操作设置了标志,并且累加器与其自身的运算将保持不变,但是基于它设置P,S和Z标志。

答案 1 :(得分:1)

偶数奇偶校验意味着在八位字节中设置了偶数位。根据{{​​3}}的简要介绍:

  

Flag是一个8位寄存器,包含5个1位标志:
    - 符号 - 设置是否设置了结果的最高位。
    - 零 - 如果结果为零则设置     - 辅助进位 - 如果从结果的第3位到第4位有进位,则设置     - 奇偶校验 - 设置奇偶校验(结果中的设置位数)是否为偶数。
    - 进位 - 设置是否在添加期间有进位,或在减法/比较期间借用。

可以使用条件分支(Intel 8085 architecture

最容易地测试奇偶校验标志
JPE label;   // Jump if parity is Even 
JPO label;   // or jump if parity is Odd

该标志由处理单个输出寄存器的大多数算术和逻辑指令设置。反例是 MOV CMP ,它们不存储结果。依次修改寄存器对的算术运算( INX DEX 等)没有明确的结果。