条件搬运指令是指在满意必定条件时进行相对搬运。
(1)比较搬运指令
CJNEA,#data,rel
CJNE A,direct,rel
CJNE Rn,#data,rel
CJNE @Ri,#data,rel
第一条指令的功用是将A中的值和当即数data比较,假如两者持平,就次第履行(履行本指令的下一条指令),假如不持平,就搬运,同样地,咱们能将rel了解成标号,即:CJNE A,#data,标号。这样使用这条指令,咱们就能判别两数是否持平,这在许多场合对错常有用的。但有时还想得知两数比较之后哪个大,哪个小,本条指令也具有这样的功用,假如两数不持平,则CPU还会反映出哪个数大,哪个数小,这是用CY(进位位)来完成的。假如前面的数(A中的)大,则CY=0,否则CY=1,因而在程序搬运后再次使用CY就可判别出A中的数比data大仍是小了。
(2)举例:
MOV A,R0
CJNE A,#10H,L1
MOV R1,#0FFH
AJMP L3
L1: JC L2
MOV R1,#0AAH
AJMP L3
L2: MOV R1,#0FFH
L3: SJMP L3
上面的程序中有一条单片机指令咱们还没学过,即JC,这条指令的原型是JC rel,效果和上面的JZ相似,可是它是判CY是0,仍是1进行搬运,假如CY=1,则搬运到JC后边的标号处履行,假如CY=0则次第履行(履行它的下面一条指令)。
剖析一下上面的程序,假如(A)=10H,则次第履行,即R1=0。假如(A)不等于10H,则转到L1处持续履行,在L1处,再次进行判别,假如(A)>10H,则CY=1,将次第履行,即履行MOV R1,#0AAH指令,而假如(A)10H,则将搬运到L2处指行,即履行MOV R1,#0FFH指令。因而终究结果是:本程序履行前,假如(R0)=10H,则(R1)=00H,假如(R0)>10H,则(R1)=0AAH,假如(R0)10H,则(R1)=0FFH。
弄懂了这条指令,其它的几条就相似了,第二条是把A傍边的值和直接地址中的值比较,第三条则是将直接地址中的值和当即数比较,第四条是将间址寻址得到的数和当即数比较,这儿就不详谈了,下面给出几个对应的例程。
CJNE A,10H ;把A中的值和10H中的值比较(留意和上题的差异)
CJNE 10H,#35H ;把10H中的值和35H中的值比较
CJNE @R0,#35H ;把R0中的值作为地址,从此地址中取数并和35H比较