Assembly 如果两个端口位相等、大于或小于,如何比较它们?
我正在研究一个8051汇编程序,我想知道一个命令,它可以帮助我比较两个端口位,并找出它们是否相等,因此我搜索了它,发现CJNE可能有用,并试图将它放入一个程序中,如下所示……我不确定我是否走上了正确的道路,也许Xnor命令更好,但我找不到适合它的,而且由于某种原因,我无法测试它Assembly 如果两个端口位相等、大于或小于,如何比较它们?,assembly,8051,Assembly,8051,我正在研究一个8051汇编程序,我想知道一个命令,它可以帮助我比较两个端口位,并找出它们是否相等,因此我搜索了它,发现CJNE可能有用,并试图将它放入一个程序中,如下所示……我不确定我是否走上了正确的道路,也许Xnor命令更好,但我找不到适合它的,而且由于某种原因,我无法测试它 ORG 00H MOV R0 ,#01H MOV R1, #00H CJNE R0,#00H,LOOP LOOP: MOV C, P1.0 ANL C,P3.0 MOV P2.0,C SJMP LOO
ORG 00H
MOV R0 ,#01H
MOV R1, #00H
CJNE R0,#00H,LOOP
LOOP: MOV C, P1.0
ANL C,P3.0
MOV P2.0,C
SJMP LOOP
END
如果我想知道一个端口位是否大于或小于另一个端口位,我可以使用ANL命令吗?不是8051上的专家,但在比较之后,如果等于分支EQ或NE,则设置零标志;如果大于CS或CC,则设置进位标志。在CJNE比较和跳转(如果不相等)之后,您可以使用JC[进位设置的目的地-ie>]检查进位标志。无需进行第二次比较-标记仍将从第一次比较开始设置
CJNE R0,#00H,NOTEQUAL
; equal code goes here, then branch out
NOTEQUAL:
JC GREATER
; less than code goes here, then branch out
GREATER:
; greater code goes here
JNC是未设置进位标志的指令-即它小于或等于,但您已经消除了等于,因此它将小于。这里有一种方法。它绝不是有效的循环或代码,但它会满足您的要求 假设您想比较P1.0和P2.0是否与以下结果相等。P3.0、P3.1和P3.2是结果指标 P1.0=P2.0,设置P3.0,否则清除
org 00H
MOV P3DIR, #0x00 ; Set direction of P3...
Start:
JB P1.0, P1Set
JB P2.0, P1NotSetP2Set
SJMP None
P1Set:
JB P2.0, P1SetP2Set
SJMP P1SetP2NotSet
P1SetP2Set:
SETB P3.0
CLRB P3.1
CLRB P3.2
SJMP Start
P1SetP2NotSet:
CLR P3.0
SETB P3.1
CLR P3.2
SJMP Start
P1NotSetP2Set:
CLR P3.0
CLR P3.1
CLR P3.2
SJMP Start
None:
SETB P3.0
CLR P3.1
SETB P3.1
SJMP Start
end
P1.0>P2.0,设置P3.1否则清除
org 00H
MOV P3DIR, #0x00 ; Set direction of P3...
Start:
JB P1.0, P1Set
JB P2.0, P1NotSetP2Set
SJMP None
P1Set:
JB P2.0, P1SetP2Set
SJMP P1SetP2NotSet
P1SetP2Set:
SETB P3.0
CLRB P3.1
CLRB P3.2
SJMP Start
P1SetP2NotSet:
CLR P3.0
SETB P3.1
CLR P3.2
SJMP Start
P1NotSetP2Set:
CLR P3.0
CLR P3.1
CLR P3.2
SJMP Start
None:
SETB P3.0
CLR P3.1
SETB P3.1
SJMP Start
end
P1.0=P2.0=0,设置P3.2否则清除
org 00H
MOV P3DIR, #0x00 ; Set direction of P3...
Start:
JB P1.0, P1Set
JB P2.0, P1NotSetP2Set
SJMP None
P1Set:
JB P2.0, P1SetP2Set
SJMP P1SetP2NotSet
P1SetP2Set:
SETB P3.0
CLRB P3.1
CLRB P3.2
SJMP Start
P1SetP2NotSet:
CLR P3.0
SETB P3.1
CLR P3.2
SJMP Start
P1NotSetP2Set:
CLR P3.0
CLR P3.1
CLR P3.2
SJMP Start
None:
SETB P3.0
CLR P3.1
SETB P3.1
SJMP Start
end